Использование мантии с основными данными - NSSet и Nsarray
-
21-12-2019 - |
Вопрос
Мне нужна ваша помощь с чем-то, так как я не могу получить голову вокруг этого. Я использую 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;
}
}
.
Я сделал это сам довольно несколько раз, и это работает как очарование!