2016-08-02 2 views
0

Привет Я выполняю функцию синхронизации, которая обновляет базу данных при получении ответа JSON от сервера. Я хочу только импорт иметь место, если есть разные данные (новая запись или обновление существующей записи) (Для увеличения производительности) (Использование coredata и magicalRecord)iOS Импорт магической записи из массива

Вот мой JSON метод синтаксического анализа

- (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 

Я проверил, что мой парсер Json работает нормально. Проблема заключается в моем методе импорта. Я не знаю, что случилось с функцией. Любая помощь очень ценится. Благодаря!

ответ

1

Сообщение об ошибке четко описывает точную проблему. Вы можете сделать это:

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

Но init не назначенный инициализатор NSManagedObject, если вы добавили init в подклассе (который вы не упомянули делать). Вы должны вызвать назначенный инициализатор, который равен initWithEntity:insertIntoManagedObjectContext:. Существует также метод удобной фабрики на NSEntityDescription под названием insertNewObjectForEntityForName:inManagedObjectContext:. Любой из них будет работать, но вызов init не будет.

+0

Привет, спасибо за вашу помощь. Я работаю с магической записью. выше, чем Stamp * stamp = [Stamp MR_createEntityInContext: localContext] ;? любой способ избежать дублирования при добавлении новой записи? –

+0

Я не использовал магическую запись, поэтому не могу быть уверен. –

+0

Знаете ли вы, как избежать дублирования записи (после получения ответа json от сервера)? –

 Смежные вопросы

  • Нет связанных вопросов^_^