문제

이 문제를 도저히 이해할 수가 없어서 당신의 도움이 필요합니다.나는 사용하고있다 맨틀 iOS의 CoreData와 함께.

다음과 같이 정의된 관계가 있습니다.

게시글 1:N댓글

REST 서비스에서 데이터를 가져올 때 NSMutableArray의 Comments가 있는 Mantle Object Post를 생성합니다.이것은 완벽하게 작동합니다.

그런 다음 이것을 Core Data에 저장하는데, 여기에서 내가 일을 제대로 하고 있는지 알 수 없습니다.

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

그래서 저는 게시물 개체를 Core Data에 저장하기 위해 이 작업을 수행하고 있습니다.핵심 데이터 모델에는 계단식 일대다 관계인 "post_has_comments"라는 관계가 있습니다.따라서 Post 개체에는 "posts_has_comments" -> 계단식이 있고, "Comment" 개체에는 "Nullify"와 일대일 관계가 있습니다.

Afaik, Core Data는 이것을 NSSet으로 취급합니다.내가 넣으려고 하는 것은 NSMutableArray입니다. Mantle이 이것을 처리할 것이기 때문입니다(적어도 소스를 간략히 살펴본 결과는 그렇습니다).

불행히도 Core Data에서 객체를 다시 가져올 때

Post* post = [MTLManagedObjectAdapter modelOfClass:Post.class fromManagedObject:[[self fetchedResultsController] objectAtIndexPath:indexPath] error:nil];

게시물 개체의 속성 설명은 빈 NSSet이므로 미리 삽입하면 오류가 꽤 많이 발생합니다.내가 얻는 오류는 다음과 같습니다.

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

막혔어요. 여기에 뭔가 큰 것을 놓치고 있는 게 아닐까요?

내 게시물 클래스는 다음과 같은 정적 메서드를 구현합니다.

+ (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;
}
.

그게 전부입니다.

다른 팁

간단한 해결 방법은 고유한 속성 설정자 메서드를 작성하는 것입니다. NSSet 그런 다음 다음으로 변환하십시오. 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