質問

私はこれを中心に頭をもらうことができないので、私は何かを何かを手助けする必要があります。私は Mantle を使用しています。

私は次のように見える関係を定義しています:

POST 1:nコメント

私が私のRESTサービスからデータを引っ張ると、その中にコメントのnsmutableArrayを持つマントルオブジェクトポストを作成します。これは完全に機能します。

それはこれをコアデータに保存します、そしてこれが私が物事をやっているかどうかわからないところです。

[MTLManagedObjectAdapter managedObjectFromModel:post insertingIntoContext:[self getManagedObjectContext] error:&error];
.

だから私はポストオブジェクトをコアデータに保存するためにこれをやっています。コアデータモデルには、1対多の関係のカスケードである「POST_HAS_COMMENTS」という関係があります。そのため、Object Postには、「POSTS_HAS_COMMENTS」 - >カスケード、マイオブジェクトの「コメント」に「NULLIFY」と1対1の関係があります。

AFAIK、コアデータはこれをNSSETとして扱います。マントルがこれを大事にするように、私が鳴らそうとしているのはnsmutableArrayです(少なくともそのソースを震わせることが私に言ったこと)。

残念ながら、

のコアデータからオブジェクトを戻すとき
Post* post = [MTLManagedObjectAdapter modelOfClass:Post.class fromManagedObject:[[self fetchedResultsController] objectAtIndexPath:indexPath] error:nil];
.

Postオブジェクトのプロパティコメントは空のNSSETで、事前に物を挿入すると非常にいくつかのエラーが発生します。私が得るエラー:

Core Data: annotation: repairing missing delete propagation for to-many relationship post_has_comments on object [...]
.

私は立ち往生しています - 多分私はここで巨大な何かを欠けている?

My Postクラスは、次の静的メソッドを実装しています。

+ (NSDictionary *)managedObjectKeysByPropertyKey {
return @{
         @"post_id" : @"id",
         @"comments" : @"post_has_comments"
         };
}

+ (NSDictionary *)JSONKeyPathsByPropertyKey {
    return @{
             @"post_id" : @"id",
             };
}

+ (NSDictionary *)relationshipModelClassesByPropertyKey {
    return @{
             @"comments" : IHComment.class
             };
}
.

役に立ちましたか?

解決

マントルのマニュアルから:

マントルは、ココアやココアタッチアプリケーションのための単純なモデルレイヤーを簡単に作成できます。

これは単なる開示されていないステートメントです。フレームワークを見て、証拠がどこにあるのかわかりません。オブジェクトを入手して、AppleのAPIを使用してそれらをコアデータに挿入する必要があります。

Post *cdPost = [NSEntityDescription insertNewObjectForEntityForName:@"Post"
   inManagedObjectContext:self.managedObjectContext];
// configure the cdPost object with the data from the web service
for (id commentObject in commentArrayFromPostObject) {
   Comment *cdComment = 
       [NSEntityDescription insertNewObjectForEntityForName:@"Comment"
       inManagedObjectContext:self.managedObjectContext];
   // configure the cdComment object with the data from the web service
   cdComment.post = cdPost;
}
.

それがすべてのものです。

他のヒント

簡単な回避策は、独自のプロパティSetterメソッドを作成し、設定されている値がNSSetである場合はそれをProperty NSMutableArrayに戻す前にそれをivarに変換してください。

例えば:

- (void)setComments:(NSMutableArray *)comments {
    if ([comments isKindOfClass:NSSet.class]) {
        _comments = [NSMutableArray arrayWithArray:[((NSSet *)comments) allObjects]];
    } else {
        _comments = comments;
    }
}
.

私はそれを私自身を数回しました、そしてそれは魅力のように動作します!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top