ios - Objective -C 类问题

标签 ios core-data nsmanagedobject objective-c-runtime objective-c-category

我有两个 NSManagedObject 子类。
我正在向 NSManagedObject 添加一个类别方法用于 JSON 表示,因此我将此类别命名为 NSManagedObject+JSON

实现NSManagedObject+JSON.m中的category方法:

- (NSDictionary *)JSONToCreateObjectOnServer {
@throw [NSException exceptionWithName:@"JSONStringToCreateObjectOnServer Not Overridden" reason:@"Must override JSONStringToCreateObjectOnServer on NSManagedObject class" userInfo:nil];
return nil;
}

为此,我正在关注 Ray Weinderleich 教程:http://www.raywenderlich.com/17927/how-to-synchronize-core-data-with-a-web-service-part-2

它指出: 这里的问题是此方法没有可能的通用实现。 NSManagedObject 的所有子类都必须通过覆盖它来实现此方法。

只要 NSManagedObject 子类没有实现此方法,就会抛出异常。

我的问题是: 我已将类别中的方法添加到我的子类中。但是我的代码没有调用我的 NSManagedObject 子类中的方法,而是进入类别并抛出异常。

这里缺少什么? 谁能指出背后的原因?

编辑 1:

- (NSDictionary *)JSONToCreateObjectOnServer {
NSDictionary *date = [NSDictionary dictionaryWithObjectsAndKeys:
                      @"Date", @"__type",
                      [[SDSyncEngine sharedEngine] dateStringForAPIUsingDate:self.date], @"iso" , nil];

NSDictionary *jsonDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                                self.name, @"name",
                                self.details, @"details",
                                self.wikipediaLink, @"wikipediaLink",
                                date, @"date", nil];    
return jsonDictionary;

这是我添加到我的 NSManagedObject 类中的方法。

我已经复制粘贴了。是因为那个还是我必须按照另一个过程将方法添加到 NSManagedObject 类。

最佳答案

创建类别是为了扩展,而不是为了覆盖或修改。所以我们无法确定它是否覆盖或被覆盖。

在你的例子中,你应该创建一个父类,而不是使用类别,它是 NSManagedObject 的子类。然后把下面的方法放到父类中。

- (NSDictionary *)JSONToCreateObjectOnServer {
   @throw [NSException exceptionWithName:@"JSONStringToCreateObjectOnServer Not Overridden" reason:@"Must override JSONStringToCreateObjectOnServer on NSManagedObject class" userInfo:nil];
   return nil;
}

另一个类将继承你的父类而不是 NSManagedObject。

P/S:你应该使用 NSAssert 而不是 throw。

引用资料:

关于ios - Objective -C 类问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28734592/

相关文章:

ios - 在 iOS 中实现长时间运行的后台任务

swift - NSBatchDeleteRequest 删除所有子实体

ios - CoreData 谓词和获取输入需要很长时间

objective-c - 核心数据持久存储中的物理位置(目录)( Objective-C )

ios - NSManagedObject prepareForDeletion 中的 self.managedObjectContext == nil 有什么意义?

javascript - ios 在 Canvas 上绘制图像并显示 :none causes memory leak

ios - SWIFT:我如何在 Swift 中使用 subscriberCellularProviderDidUpdateNotifier

ios - 在父类(super class)中声明一个可以被子类访问的 block

objective-c - NSOutlineView + NSTreeController + CoreData + Bindings 行重复

iphone - 核心数据 - 查找具有重叠日期范围的记录