我有一些核心数据条目,当应用程序启动时,这些条目都被提取并投入到数组中。
当我使用deleteObject:
从Core Data中删除对象时,我通过再次读取所有Core Data条目并将它们放入数组来刷新此数组。这里,Core Data对象被正确删除,并且未加载到新数组中。但是当我再次启动应用程序时,不会删除条目。他们又被装上了。
有没有人知道为什么我的Core Data对象没有被正确删除?
这是删除对象的地方:
// Define our table/entity to use
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Notes" inManagedObjectContext:managedObjectContext];
// Setup the fetch request
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];
// Fetch the records and handle an error
NSError *error;
NSMutableArray *allNotes = [[NSMutableArray alloc] initWithArray:[[managedObjectContext executeFetchRequest:request error:&error] mutableCopy]];
for(int i = 0; i < [allNotes count]; i++) {
if([[allNotes objectAtIndex:i] identifier] == [[note objectAtIndex:0] identifier]) {
[managedObjectContext deleteObject:[allNotes objectAtIndex:i]];
NSLog(@"DELETING..");
NSLog(@"%@", [allNotes objectAtIndex:i]);
}
}
[request release];
这是我在启动时设置核心数据条目数组的方法
// Define our table/entity to use
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Notes" inManagedObjectContext:managedObjectContext_];
// Setup the fetch request
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];
// Fetch the records and handle an error
NSError *error;
globalNotes = [[NSMutableArray alloc] initWithArray:[[managedObjectContext_ executeFetchRequest:request error:&error] mutableCopy]];
[request release];
NSLog(@"NOTES ON STARTUP");
NSLog(@"%@", globalNotes);
以下是我使用NSLog
打印的一些数据。这可能有助于解决问题,并会显示这些注释已被删除,但会重新启用。
2011-04-25 20:11:40.877 Caltio[4039:707] NOTES ON STARTUP
2011-04-25 20:11:40.888 Caltio[4039:707] (
"<Notes: 0x1855d0> (entity: Notes; id: 0x184cd0 <x-coredata://DC8B3294-6D87-4236-9E5C-29E11F7330FA/Notes/p2> ; data: <fault>)",
"<Notes: 0x1858b0> (entity: Notes; id: 0x184ce0 <x-coredata://DC8B3294-6D87-4236-9E5C-29E11F7330FA/Notes/p3> ; data: <fault>)"
)
2011-04-25 20:16:41.561 Caltio[4039:707] DELETING..
2011-04-25 20:16:41.569 Caltio[4039:707] <Notes: 0x1855d0> (entity: Notes; id: 0x184cd0 <x-coredata://DC8B3294-6D87-4236-9E5C-29E11F7330FA/Notes/p2> ; data: {
added = "2011-04-25 17:56:15 +0000";
identifier = 2567446185;
note = Test;
updated = 0;
})
2011-04-25 20:16:41.589 Caltio[4039:707] NOTES AFTER REFRESH:
2011-04-25 20:16:41.595 Caltio[4039:707] (
"<Notes: 0x1858b0> (entity: Notes; id: 0x184ce0 <x-coredata://DC8B3294-6D87-4236-9E5C-29E11F7330FA/Notes/p3> ; data: {\n added = \"2011-04-25 17:57:26 +0000\";\n identifier = 2567446127;\n note = Test;\n updated = 0;\n})"
)
2011-04-25 20:17:05.103 Caltio[4052:707] NOTES ON STARTUP
2011-04-25 20:17:05.115 Caltio[4052:707] (
"<Notes: 0x1bee60> (entity: Notes; id: 0x1be570 <x-coredata://DC8B3294-6D87-4236-9E5C-29E11F7330FA/Notes/p2> ; data: <fault>)",
"<Notes: 0x1bf150> (entity: Notes; id: 0x1bdcd0 <x-coredata://DC8B3294-6D87-4236-9E5C-29E11F7330FA/Notes/p3> ; data: <fault>)"
)
答案 0 :(得分:2)
你保存了managedObjectContext
吗?据我了解,添加,修改和删除对象只会影响其内存中的表示。您还需要保存上下文以保持它。