BTDependentVC 1.0.0

BTDependentVC 1.0.0

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布最后发布2017年2月

Денис Либит 维护。



  • 作者:
  • Денис Либит

对 UIViewController 类别进行扩展,以检测和报告 NSManagedObject 的状态和属性的变化,并优雅地处理删除操作。

特性

  • 集成到每个 UIViewController 子类中 – UITableViewController、UINavigationController 等。
  • 跟踪多个 NSManagedObject 的变化,这些对象可以是不同的 Core Data 实体,这与 NSFetchedResultsController 不同。
  • 当它的依赖之一 – NSManagedObject – 被删除时
    • 如果已显示,则自动关闭。
    • 如果它在 UINavigationController 的堆栈中嵌入,则弹出到上一个视图控制器。
  • 关于依赖项的删除和属性的变化报告。

使用场景

以下 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被重置或其NSPersistentStoreNSPersistentStoreCoordinator中移除时,将调用此方法。
更新标识 当特定NSManagedObject的属性值发生变化时,将被调用。

要求

  • iOS 9.0+。
  • 接受属于NSMainQueueConcurrencyType的上下文的NSManagedObject

安装

BTDependentVC可以通过CocoaPods获得。要安装它,只需将以下行添加到您的Podfile中

pod "BTDependentVC"

要运行示例项目,首先克隆repo,然后在Example目录中运行pod install

导入pod的头文件

#import <BTDependentVC/BTDependentVC.h>

作者

Денис Либит,
[email protected]

许可协议

BTDependentVC可在MIT许可下获得。有关更多信息,请参阅LICENSE文件。