Ultra Object 是基于事件的模型框架。它帮助您轻松管理对象。如果您正在使用 RESTful API,这可以是为创建、更新和删除对象并将更改应用到视图和控制器的良好解决方案。
Ultra Object 还帮助您应用可变/不可变模式。
#import "UltraObject.h"
@interface TodoObject : UOObject
@property (nonatomic, strong) NSString *content;
@property (nonatomic, strong) NSDate *date;
@end
- (IBAction)createButtonPressed {
NSString *content = self.contentTextField.text;
[TodoObject new:@{@"id": @(++__uniqueID), @"content": content}];
}
- (IBAction)updateButtonPressed {
[self.todoObject edit:^(TodoObject *object) {
object.content = self.contentTextField.text;
}];
}
- (IBAction)deleteButtonPressed {
[self.todoObject destroy];
}
通过对象观察,您可以轻松地通知对象如果被修改。
- (void)viewDidLoad {
[super viewDidLoad];
[self.todoObject addObserverWithTarget:self action:@selector(onTodoEvent:)];
}
- (void)onTodoEvent:(UOEvent *) {
if (event.type == UOEventTypeUpdate) {
TodoObject *object = event.object;
self.contentLabel.text = object.content;
}
}
[self.todoObject addObserverWithTarget:self block:^(UOEvent *)event {
NSLog(@"%@", event.object);
}];
您将收到该类中任何对象的每个事件的的通知。
[TodoObject addObserverWithTarget:self action:@selector(onTodoEvent:)];
您可以设置对象数组代理来接收相关对象的事件。可变数组将根据事件类型自动修改。例如,destroy
或 update
事件通过删除或更新数据影响可变数组。
您还可以决定是否将新创建的对象插入到数组中,或者甚至设置它的插入位置。
- (void)viewDidLoad {
[super viewDidLoad];
NSMutableArray *todoObjects = [TodoObject arrayOfModelsFromDictionaries:jsonArray];
[todoObjects setObjectArrayDelegate:self class:TodoObject.class];
}
- (void)objectArray:(NSMutableArray *)array didReceiveEvent:(UOEvent *)event {
[self.tableView reloadData];
}
- (NSUInteger)objectArray:(NSMutableArray *)array indexOfNewObject:(TodoObject *)object {
return 0;
}
Ultra Object 使用 JSONModel。请阅读JSONModel#Basic Usage部分了解如何从 JSON 中加载数据。
如果您希望对象不可变以提高安全性,您可以通过继承原始对象并使其符合 UOMutableObject
协议来定义可变对象。
原始对象应定义关联对象以正确加载 JSON。
@interface TodoObject : UOObject
@property (nonatomic, readonly) NSString *content;
@end
@interface MutableTodoObject : UOObject
@property (nonatomic, readwrite) NSString *content;
@end
@interface TodoObject ()
@property (nonatomic, strong) NSString *content;
@end
@implementation TodoObject
@end
@implementation MutableTodoObject
@dynamic content;
@end
edit:
方法将传递可变对象。
[self.todoObject edit:^(MutableTodoObject *)mutableObject {
mutableObject.content = @"New content";
}];
要运行示例项目,首先克隆仓库,然后从示例目录运行 pod install
。
Ultra Object 支持iOS 7.0以上版本。
UltraObject 可通过 CocoaPods 获取。要安装它,只需在 Podfile 中添加以下行
pod "UltraObject"
Sungwon Lee,[email protected]
请将其Fork并编辑、添加规范并提交拉取请求。
UltraObject 根据 MIT 许可证提供。有关更多信息,请参阅 LICENSE 文件。