2016-08-02 7 views
0

こんにちは私はサーバからの応答JSONを受け取ったときにデータベースを更新する同期機能を作っています。私は別のデータ(新規レコードまたは更新既存のレコード)がある場合、インポートはここでしか iOS Magical record import from array

は私の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; 
} 

され(coredatamagicalRecordを使用)(パフォーマンスを向上させるために)場所を取るしたい私インポート方法

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

エラーメッセージには、正確な問題が明確に説明されています。あなたはこれを行う:あなたのサブクラスでinitを追加しない限り、

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

しかしinitは(あなたがやって言及しなかった)NSManagedObjectための指定イニシャライザではありません。指定された初期化子(initWithEntity:insertIntoManagedObjectContext:)を呼び出す必要があります。 NSEntityDescriptionの便利なファクトリメソッドもinsertNewObjectForEntityForName:inManagedObjectContext:と呼ばれています。それらのいずれかが動作しますが、initを呼び出すと動作しません。

+0

こんにちは、私は魔法のレコードのライブラリで働いています。上記の値はStamp * stamp = [Stamp MR_createEntityInContext:localContext];?と等しくなります。新しいレコードを追加するときに重複を避ける方法はありますか? –

+0

私は魔法の記録を使用していないので、私は確信が持てません。 –

+0

とにかく(サーバーからjsonの応答を受け取った後に)重複レコードを追加しないようにする方法を知っていますか? –

関連する問題