0
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
RPCoreData *manager = [RPCoreData sharedManager];
if (manager.IdsArray) {
NSPredicate *itemFilter = [NSPredicate
predicateWithFormat:@"NOT (id IN %@)", manager.IdsArray];
NSArray *itemArray = [ItemData MR_findAllWithPredicate:itemFilter];
for (ItemData *itemData in itemArray) {
NSPredicate *categoryFilter =
[NSPredicate predicateWithFormat:@"id == %@", itemData.category.id];
CategoryData *categoryDataInLocalContext =
[CategoryData MR_findFirstWithPredicate:categoryFilter inContext:localContext];
if (![categoryDataInLocalContext isKindOfClass:[NSNull class]]) {
[categoryDataInLocalContext removeRelationshipObject:itemData];
}
}
}
}
completion:^(BOOL success, NSError *error) {
NSLog(@"%i %@", success, error);
}];
NSlogが出力します。CoreDataはアイテム間の関係を削除していません
CategoryDataとItemDataの関係は削除されていません。 カテゴリーは単に
for (ItemData *itemData in itemArray) {
itemData.categoryData = nil
}
CategoryDataをフェッチする必要はありませんを設定することによりにItemData
あなたは 'manager.IdsArray'に実際に何かが含まれていることを確認しましたか?デバッグし、すべての変数を見て、あなたが期待していないものを見つけてください。あなたはすでに関係を持っているのでカテゴリをフェッチする必要はありません... – Wain
あなたは間違ったコンテキストにアクセスしているので、このコードで '[ItemData MR_findAllWithPredicate:itemFilter]'を実行すべきではありません。( IIRCこれは主なコンテキストを使用しています) – Wain
@Wain感謝します。私はいつもどこかでローカルな文脈を忘れています。 – user1898829