Использование мантии с основными данными - NSSet и Nsarray

StackOverflow https://stackoverflow.com//questions/21042163

Вопрос

Мне нужна ваша помощь с чем-то, так как я не могу получить голову вокруг этого. Я использую Mantle вместе с Coredata в iOS.

У меня есть отношения, определенные, которые выглядят следующим образом:

post 1: n Комментарий

Когда я вытягиваю данные из моей службы отдыха, я создаю почту объекта Mantle, который имеет NSMutablearray комментариев в нем. Это работает безупречно.

Я тогда храним это в основных данных, и это где я не знаю, делаю ли я все правильно.

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

Так что я делаю это, чтобы сохранить свой пост объект в основные данные. Основная модель данных имеет отношения, называемые «post_has_comments», которые являются каскадной однозначным отношениям. Итак, на объекте Post у меня есть «Post_HAS_COMMENT» -> Каскадинг, на моем объекте «Комментарий» у меня есть отношение к одному на один с «Nullify».

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 [...]
.

Я застрял - может быть, я не хватаю что-то огромное здесь?

Мой класс Post реализует следующие статические методы:

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

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

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

Это было полезно?

Решение

из документации мантии:

Mantle позволяет легко написать простой модельный слой для вашего приложения Cocoa или Cocoa Touch.

Это просто недоказанное заявление.Глядя на рамки, я не вижу, где доказательства.Вы должны получить свои объекты и вставить их в основные данные с помощью APIS APIS.

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