Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 核心数据删除对象在启动时重新出现_Iphone_Core Data_Object - Fatal编程技术网

Iphone 核心数据删除对象在启动时重新出现

Iphone 核心数据删除对象在启动时重新出现,iphone,core-data,object,Iphone,Core Data,Object,我有一些核心数据条目,它们都是在应用程序启动时提取并抛出到数组中的。 当我使用deleteObject:从核心数据中删除一个对象时,我会通过再次读取所有核心数据条目来刷新此数组,并将它们放入数组中。在这里,核心数据对象被正确删除,并且不会加载到新阵列中。但当我再次启动应用程序时,条目不会被删除。它们再次加载 有人知道为什么我的核心数据对象没有被正确删除吗 这是我删除对象的地方: // Define our table/entity to use NSEntityDescription *en

我有一些核心数据条目,它们都是在应用程序启动时提取并抛出到数组中的。 当我使用
deleteObject:
从核心数据中删除一个对象时,我会通过再次读取所有核心数据条目来刷新此数组,并将它们放入数组中。在这里,核心数据对象被正确删除,并且不会加载到新阵列中。但当我再次启动应用程序时,条目不会被删除。它们再次加载

有人知道为什么我的核心数据对象没有被正确删除吗

这是我删除对象的地方:

// 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];
下面是我使用
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>)"
)
2011-04-25 20:11:40.877计算[4039:707]启动注意事项
2011-04-25 20:11:40.888计算[4039:707](
“(实体:备注;id:0x184cd0;数据:)”,
“(实体:注释;id:0x184ce0;数据:)”
)
2011-04-25 20:16:41.561 Caltio[4039:707]删除。。
2011-04-25 20:16:41.569计算[4039:707](实体:注释;id:0x184cd0;数据:{
新增=“2011-04-2517:56:15+0000”;
标识符=2567446185;
注=试验;
更新=0;
})
2011-04-25 20:16:41.589 Caltio[4039:707]刷新后的注释:
2011-04-25 20:16:41.595 Caltio[4039:707](
“(实体:Notes;id:0x184ce0;数据:{\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]启动注意事项
2011-04-25 20:17:05.115计算[4052:707](
“(实体:注释;id:0x1be570;数据:)”,
“(实体:注释;id:0x1bdcd0;数据:)”
)

是否保存
managedObjectContext
?据我所知,添加、修改和删除对象只会真正影响它们在内存中的表示。您还需要保存上下文以将其持久化。

在我的AppDelegate中,有一个名为
-(void)saveContext的方法,它是在创建项目时添加的。我猜
managedObjectContext
保存在这里。除此之外,我什么也不做。还有其他保存方法吗?
NSManagedObjectContext
有一个名为
save:
的方法。应用程序委托中的
saveContext
版本(假设您引用的版本是模板中的版本)仅在应用程序终止时保存。当然,在iOS4中,这几乎是不可能的。太棒了!我以为它是用
saveContext
保存的。非常感谢你!现在我明白了。真棒:-)
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>)"
)