对 UIViewController 类别进行扩展,以检测和报告 NSManagedObject 的状态和属性的变化,并优雅地处理删除操作。
以下 UITableViewController 子类代表客户表单。当用户在客户列表中选中某行时,它可以推入 UINavigationController 的堆栈,或者它可以作为弹出视图显示。
当表示 Core Data 对象变化时,它将自动更改标题和界面元素的值,并在该对象从上下文中删除时取消显示。
@interface BTCustomerVC : UIViewController
- (instancetype)initWithCustomer:(DBCustomer *)customer;
@end
@implementation BTCustomerVC
- (instancetype)initWithCustomer:(DBCustomer *)customer
{
self = [super init];
if (!self) {
return nil;
}
self.modalPresentationStyle = UIModalPresentationPopover;
// add customer object as dependency
[self dvc_add:customer];
return self;
}
// optional method that will be called when dependency changed
- (void)dvc_updated:(NSManagedObject *)dependency
{
if ([dependency isKindOfClass:[DBCustomer class]]) {
DBCustomer *customer = (id)dependency;
self.title = customer.name;
self.positionLabel.text = customer.position;
}
}
属性 | 类型 | 描述 |
---|---|---|
dvc_defaultAutoDismiss |
BOOL |
类属性。定义新实例化控制器默认行为。默认值为 YES 。 |
dvc_autoDismiss |
BOOL |
当此属性值为 YES 且任何依赖项被删除时,将关闭视图控制器。 |
dvc_autoDismissAnimated |
BOOL |
YES 以启用动画关闭。 |
dvc_dependencies |
NSSet |
视图控制器的依赖项列表。 |
方法 | 描述 |
---|---|
dvc_add |
将指定的 NSManagedObject 添加到依赖项列表中,并开始跟踪其状态和属性的变化。 |
dvc_remove |
从依赖项列表中删除指定的 NSManagedObject,并停止跟踪其变化。 |
dvc_removeAll |
删除所有依赖项。 |
dvc_contains |
如果指定的 NSManagedObject 当前列为准接收器的依赖项,则返回 YES 。 |
以下方法可以在 UIViewController 的子类中实现。
方法 | 描述 |
---|---|
删除标识 |
当特定依赖于接收者的NSManagedObject 被删除、其NSManagedObjectContext 被重置或其NSPersistentStore 从NSPersistentStoreCoordinator 中移除时,将调用此方法。 |
更新标识 |
当特定NSManagedObject 的属性值发生变化时,将被调用。 |
NSMainQueueConcurrencyType
的上下文的NSManagedObject
。BTDependentVC可以通过CocoaPods获得。要安装它,只需将以下行添加到您的Podfile中
pod "BTDependentVC"
要运行示例项目,首先克隆repo,然后在Example目录中运行pod install
。
导入pod的头文件
#import <BTDependentVC/BTDependentVC.h>
Денис Либит,
[email protected]
BTDependentVC可在MIT许可下获得。有关更多信息,请参阅LICENSE文件。