Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSManagedObject子类';Swift中的等效类别?_Ios_Swift_Core Data - Fatal编程技术网

Ios NSManagedObject子类';Swift中的等效类别?

Ios NSManagedObject子类';Swift中的等效类别?,ios,swift,core-data,Ios,Swift,Core Data,我刚开始使用Swift,通常在Objective-C中,我会为我的每个NSManagedObject子类创建一个类别,这样在每次生成子类时该类别不会被删除。此外,它还可以简化CoreData对象的创建,特别是当由来自JSON的数据填充时 示例: 我的NSManagedObject子类: @class Book; @interface Book : NSManagedObject @property (nonatomic, retain) NSString * name; @property

我刚开始使用Swift,通常在Objective-C中,我会为我的每个NSManagedObject子类创建一个类别,这样在每次生成子类时该类别不会被删除。此外,它还可以简化CoreData对象的创建,特别是当由来自JSON的数据填充时

示例:

我的NSManagedObject子类:

@class Book;

@interface Book : NSManagedObject

@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSString * author;
@property (nonatomic, retain) NSString * plot;
@end
其“助手”类别实现:

+ (Book*)bookFromDictionary:(NSDictionary *)dictionary inContext:(NSManagedObjectContext *)context {
    Book *book = nil;

    NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Book"];
    request.predicate = [NSPredicate predicateWithFormat:@"name == %@", dictionary[@"name"]];
    request.fetchLimit = 1;

    NSError *error;
    NSArray *result = [context executeFetchRequest:request error:&error];

    if (!result || error) {
        NSLog(@"Error getting Book : %@", error.localizedDescription);
    } else if ([result count] == 0) {
        book = [NSEntityDescription insertNewObjectForEntityForName:@"Book" inManagedObjectContext:context];
    } else {
        book = [result lastObject];
    }

    self.name = dictionary[@"name"];
    self.author = dictionary[@"author"];
    self.plot = dictionary[@"plot"];

    return book;
}
我试图在Swift中复制这个概念,但我不知道如何复制。 扩展似乎取代了Swift中的类别,但如果我在Swift中将扩展实现到NSManagedObject子类中,每次我必须生成NSManagedObject子类时,它都会被删除(因为它在同一个文件中…)。这就是为什么我在Obj-C中创建类别

有人能告诉我Swift在这方面有哪些好的做法吗


我将非常感谢任何帮助

Swift扩展是为
NSManagedObject
子类定义其他方法的正确方法。 您可以将扩展名放入单独的文件中 (例如“BookExtensions.swift”),以便在
“Book.swift”在Xcode中重新创建。

在swift中为
NSManagedObjects
生成子类时出现问题。通常,您必须再次手动检查它们,例如,将类型更改为选项,包括
@objc(Class)
等标记


因此,我改变了我的工作流程:我现在在生成的文件中包括自定义方法,而不使用扩展名
(这是一个类别的Swift等价物)。更新托管对象模型时,我只需通过添加、重命名、更改等方式略微更改文件的属性和关系。

类别是在ObjC中执行此操作的正确方法(很明显,一旦您被咬了,但为什么样板Xcode不生成不包含此效果的注释?),我使用扩展。现在我不建议让Xcode创建子类。在nillable属性方面遇到一些问题。不让Xcode创建子类,是不是意味着根本不使用数据模型文件?或者我必须以编程方式维护NSManagedObject子类,同时维护一个等效的数据模型文件吗?另一个问题(我不能再编辑了…)。mogenerator是否是解决此类问题的一个好选择(仍在Swift中)?