Bur*_*jua 6 iphone core-data objective-c
如何删除所有对象?我知道我可以删除一个
[managedObjectContext deleteObject:objToDelete];
Run Code Online (Sandbox Code Playgroud)
是否有可能删除所有没有迭代所有数组?谢谢
Luk*_*ice 11
此函数从磁盘中删除当前的SQLite db文件并创建一个新文件.它比任何迭代删除都快得多.
-(void)deleteAndRecreateStore{
NSPersistentStore * store = [[self.persistentStoreCoordinator persistentStores] lastObject];
NSError * error;
[self.persistentStoreCoordinator removePersistentStore:store error:&error];
[[NSFileManager defaultManager] removeItemAtURL:[store URL] error:&error];
__managedObjectContext = nil;
__persistentStoreCoordinator = nil;
[self managedObjectContext];//Rebuild The CoreData Stack
}
Run Code Online (Sandbox Code Playgroud)
如果要在Application Delegate外部调用此函数(假设样板文件为CoreData),可以使用它来获取对应用程序委托的引用:
YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate];
Run Code Online (Sandbox Code Playgroud)
不要忘记导入标题.
将对象标记为删除然后保存按照它的方式工作,因为Core Data仍然需要为要删除的所有对象运行验证规则.毕竟,一个对象可以根据它的响应方式拒绝删除-validateForDelete:.
如果:
然后:
这就是我"重置"我的数据存储所做的事情:
- (BOOL)resetDatastore
{
[[self managedObjectContext] lock];
[[self managedObjectContext] reset];
NSPersistentStore *store = [[[self persistentStoreCoordinator] persistentStores] lastObject];
BOOL resetOk = NO;
if (store)
{
NSURL *storeUrl = store.URL;
NSError *error;
if ([[self persistentStoreCoordinator] removePersistentStore:store error:&error])
{
[[self persistentStoreCoordinator] release];
__persistentStoreCoordinator = nil;
[[self managedObjectContext] release];
__managedObjectContext = nil;
if (![[NSFileManager defaultManager] removeItemAtPath:storeUrl.path error:&error])
{
NSLog(@"\nresetDatastore. Error removing file of persistent store: %@",
[error localizedDescription]);
resetOk = NO;
}
else
{
//now recreate persistent store
[self persistentStoreCoordinator];
[[self managedObjectContext] unlock];
resetOk = YES;
}
}
else
{
NSLog(@"\nresetDatastore. Error removing persistent store: %@",
[error localizedDescription]);
resetOk = NO;
}
return resetOk;
}
else
{
NSLog(@"\nresetDatastore. Could not find the persistent store");
return resetOk;
}
}
Run Code Online (Sandbox Code Playgroud)
你也可以拆掉堆栈(释放NSManagedObjectContext,NSPersistentStore和NSManagedObjectModel)并删除文件.可能比遍历整个数据库并单独删除每个对象更快.
此外,它们不太可能在将来提供此功能,因为它很容易删除该文件.但是,如果您认为重要,那么请提交雷达并告知Apple.否则他们不会知道有多少人想要这个功能.
| 归档时间: |
|
| 查看次数: |
12058 次 |
| 最近记录: |