0

1 つの属性を持つ 1 つのエンティティを含む単純な XCDataModel があります。基本的に、一連の日付を保存しています。

これで、NSDates を追加した後にフェッチ要求を実行し、結果を次のように実行したため、NSDates を適切に追加していることがわかります。

for (NSManagedObject *info in fetchedObjects) {
    NSLog(@"Name: %@", [info valueForKey:@"attribute"]);
}

そして、すべての追加の NSDate が考慮されます。ログの例:

2012-06-19 12:40:38.531 Arts Days[47194:16103] Name: 2013-03-27 04:00:00 +0000
2012-06-19 12:40:38.531 Arts Days[47194:16103] Name: 2013-03-01 05:00:00 +0000
2012-06-19 12:40:38.532 Arts Days[47194:16103] Name: 2013-01-01 05:00:00 +0000

ここで、 Core Data からオブジェクトを削除しようとすると、(同じフェッチを実行して結果を再度実行することにより) 失敗することがわかります。

フェッチは次のとおりです。

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Entity" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];

[fetchRequest setFetchBatchSize:366];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];

NSError *error = nil;

[fetchRequest setSortDescriptors:sortDescriptors];

NSArray *fetchedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];

for (NSManagedObject *object in fetchedObjects) {
    if ([[object valueForKey:@"date"] isEqualToDate:date]) {
        [managedObjectContext deleteObject:object];
    }
}
if (![managedObjectContext save:&error]) {
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}

また、未解決のエラーを含む NSLog には nil nil が含まれています...

私が間違っていることを知っていますか?

4

1 に答える 1

1

2つの異なるNSManageObjectContextインスタンスを使用しているようです。self.managedObjectContext(ivar)フェッチ要求を設定してフェッチを実行しますが、ローカルインスタンスはdeleteObject:andsave:操作を実行します。ローカルインスタンスmanagedObjectContextはおそらくnilであり、ivarと同じオブジェクトを参照していません。

于 2012-06-19T16:49:55.250 に答える