iOS从数组中导入魔法logging

您好我正在做一个同步function,更新数据库时,从服务器接收JSON响应。 我想导入只发生,如果有不同的数据(新的logging或更新现有的logging)(以提高性能)(使用coredatamagicalRecord

这是我的JSONparsing器方法

 - (void)updateWithApiRepresentation:(NSDictionary *)json { self.title = json[@"Name"]; self.serverIdValue = [json[@"Id"] integerValue]; self.year = json[@"Year of Release"]; self.month = json[@"Month of Release"]; self.day = json[@"Day of Release"]; self.details = json[@"Description"]; self.coverImage = json[@"CoverImage"]; self.thumbnail = json[@"Thumbnail"]; self.price = json[@"Buy"]; NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; [formatter setDateFormat:@"dd/MMMM/yyy"]; NSDate *date = [formatter dateFromString:[NSString stringWithFormat:@"%@/%@/%@",self.day,self.month,self.year]]; self.issueDate = date; } 

而我的导入方法

 + (void)API_getStampsOnCompletion:(void(^)(BOOL success, NSError *error))completionBlock { [[ApiClient sharedInstance] getStampsOnSuccess:^(id responseJSON) { NSManagedObjectContext *localContext = [NSManagedObjectContext MR_context]; NSMutableArray *stamps = [[NSMutableArray alloc]init]; [responseJSON[@"root"] enumerateObjectsUsingBlock:^(id attributes, NSUInteger idx, BOOL *stop) { Stamp *stamp = [[Stamp alloc]init]; [stamp setOrderingValue:idx]; [stamp updateWithApiRepresentation:attributes]; [stamps addObject:stamp]; }]; [Stamp MR_importFromArray:stamps inContext:localContext]; } onFailure:^(NSError *error) { if (completionBlock) { completionBlock(NO, error); } }]; } 

我得到错误

 CoreData: error: Failed to call designated initializer on NSManagedObject class 'Stamp' 2016-08-02 23:52:20.216 SingPost[2078:80114] -[Stamp setOrdering:]: unrecognized selector sent to instance 0x78f35a30 

我检查了我的Jsonparsing器工作正常。 问题是我的导入方法。 我不知道这个函数有什么问题。 任何帮助非常感谢。 谢谢!

错误消息清楚地描述了确切的问题。 你做这个:

 Stamp *stamp = [[Stamp alloc]init]; 

但是, init不是NSManagedObject的指定初始值,除非你在你的子类中添加了init (你没有提到)。 您必须调用指定的初始化程序,即initWithEntity:insertIntoManagedObjectContext:NSEntityDescription上还有一个名为insertNewObjectForEntityForName:inManagedObjectContext:的便捷工厂方法insertNewObjectForEntityForName:inManagedObjectContext: 这些都可以,但是调用init不会。