我想在運行我的應用程序時,在我的iphone上刪除我核心數據中的所有條目。如何從Xcode中刪除手機上Core Data中的所有條目?
我只想檢查我的保存工作流程是否正常,但我不想以編程方式進行。
我的意思是,是否有一個命令/按鈕,從Xcode,發送消息來重置從Xcode應用程序的核心數據條目?
謝謝
我想在運行我的應用程序時,在我的iphone上刪除我核心數據中的所有條目。如何從Xcode中刪除手機上Core Data中的所有條目?
我只想檢查我的保存工作流程是否正常,但我不想以編程方式進行。
我的意思是,是否有一個命令/按鈕,從Xcode,發送消息來重置從Xcode應用程序的核心數據條目?
謝謝
我不認爲有直接從Xcode做任何功能。
這是我做的:
如果你是在模擬器,你可以去尋找SQLite的文件並打開它,然後刪除所需的條目。 (Remenber認爲你的應用程序必須關閉,否則你會得到核心數據錯誤,因爲託管對象上下文會緩存你刪除的內容)。
在設備中,重置數據庫的更快方法是直接刪除文件。 如果您的核心數據代碼在啓動時無法找到該文件,則會處理持久性存儲的創建。您可以使用任何您喜歡的應用程序(即imazing.com)進入手機並刪除sql文件,然後從頭開始重新開始。 希望它有幫助。
我有這個代碼來清理實體,牢記內存壓力只加載ObjectId和其他一些調整。核心數據當你想要移除許多對象時很糟糕。使用1到n關係的刪除級聯規則也是一個很好的解決方案。
- (BOOL) resetEntity:(NSString*)entityName
withPredicate:(NSPredicate*)predicate
inManagedObjectContext:(NSManagedObjectContext*)context
andError:(NSError **)error
{
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:entityName inManagedObjectContext:context]];
[fetchRequest setIncludesPropertyValues:NO]; //only fetch the managedObjectID to optimize.
fetchRequest.resultType = NSManagedObjectIDResultType;
[fetchRequest setFetchBatchSize:20]; //reduce memory usage
if (predicate)
{
[fetchRequest setPredicate:predicate];
}
NSError * fetchError = nil;
NSArray * objects = [context executeFetchRequest:fetchRequest error:&fetchError];
if (fetchError)
{
DDLogError(@"ERROR: Core Data Reset %@ : %@", entityName, fetchError);
*error = fetchError;
return NO;
}
for (NSManagedObjectID * objectID in objects)
{
[context deleteObject:[context objectWithID:objectID]];
}
NSError *saveError = nil;
[context save:&saveError];
if (saveError) {
NSLog(@"ERROR: Core Data Reset %@ : %@", entityName, fetchError);
*error = saveError;
return NO;
}
return YES;
}
您可以隨時從您的應用程序中刪除.sqlite文件。 – Ares 2015-02-11 05:15:51