2011-08-07 9 views
7

次のJSONの関係をCoreDataバックアップモデルにマップしようとしています。RestKitとネストされた多対多の関係

ここではJSONです:私はRestKitのOM2クラスにマッピングされてきた

{ 
    "photos": [ 
     { 
      "id": 1, 
      "thumb": "http://localhost/test_1_thumb.png", 
      "image": "http://localhost/test_1.png", 
      "date": "2011-07-02T06:06:16Z", 
      "likes": 0, 
      "user": { 
       "id": 1, 
       "username": "User1", 
       "avatar": "http://cdn.domain.com/avatar.jpg" 
      }, 
      "comments": [ 
       { 
        "date": "2011-07-02T06:06:16Z", 
        "text": "This is the only comment", 
        "id": 1, 
        "author": { 
         "username": "User1", 
         "id": 1, 
         "avatar": "http://cdn.domain.com/avatar.jpg" 
        } 
       } 
      ] 
     } 
    ] 
} 

マイCoreDataモデル。

CoreData Entities

写真クラス。

@interface Photo : NSManagedObject 

@property (nonatomic, retain) NSString * thumbnailUrl; 
@property (nonatomic, retain) NSString * imageUrl; 
@property (nonatomic, retain) NSDate * date; 
@property (nonatomic, retain) NSNumber * likes; 
@property (nonatomic, retain) NSNumber * photoID; 
@property (nonatomic, retain) User *owner; 
@property (nonatomic, retain) NSSet *comments; 

@end 

@interface Photo (CoreDataGeneratedAccessors) 

- (void)addCommentsObject:(Comment *)value; 
- (void)removeCommentsObject:(Comment *)value; 
- (void)addComments:(NSSet *)values; 
- (void)removeComments:(NSSet *)values; 

@end 

@implementation Photo 

@dynamic thumbnailUrl; 
@dynamic imageUrl; 
@dynamic date; 
@dynamic likes; 
@dynamic photoID; 
@dynamic owner; 
@dynamic comments; 

@end 

今、私は完全にはよく分からない部分が関係ある:これにより

// Map relationships between entities. 
[commentMapping mapKeyPath:@"author" toRelationship:@"author" withMapping:userMapping]; 
[photoMapping mapKeyPath:@"user" toRelationship:@"owner" withMapping:userMapping]; 
[photoMapping mapKeyPath:@"comments" toRelationship:@"comments" withMapping:commentMapping]; 

私はこのエラーで、すべてのが、写真のcomments属性にアクセスすることができるよ:Comments = Relationship 'comments' fault on managed object 。私はこれがNSモデルとして定義されたcommentsを持っている写真モデルと関係があると感じている、または私は関係マッピングに何か間違っているが、私はわからない。

答えて

7

をチェックアウトだから、問題はRestKitまたはマッピングが、どのようにCoreDataの機能の私の理解とは何の関係もなかったことが判明。

次のように私は私のdelgateにマッピングされたJSONオブジェクトにアクセスした

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects { 
    NSLog(@"Loaded photos: %@", objects); 

    for (id object in objects) { 
     Photo *photo = object; 
     // Print other photo attributes... 

     NSLog(@"Comments = %@", photo.comments); 
    } 
} 

問題は直接コレクションオブジェクトを印刷しようとしていました。 CoreDataはデータストアの障害を発生させません。単純に次のように高速反復に置き換えて、プロパティにアクセスするとコメントオブジェクトにアクセスすることができました。

for (Photo *photo in objects) { 
    for (Comment *comment in photo.comments) NSLog(@"Comment = %@", comment.text); 
} 
+0

あなたは私を救った、ありがとう! –