2015-02-11 11 views
1

我想在運行我的應用程序時,在我的iphone上刪除我核心數據中的所有條目。如何從Xcode中刪除手機上Core Data中的所有條目?

我只想檢查我的保存工作流程是否正常,但我不想以編程方式進行。

我的意思是,是否有一個命令/按鈕,從Xcode,發送消息來重置從Xcode應用程序的核心數據條目?

謝謝

+0

您可以隨時從您的應用程序中刪除.sqlite文件。 – Ares 2015-02-11 05:15:51

回答

1

我不認爲有直接從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; 
} 
+0

感謝您的回覆,但在設備上,您是否有任何優勢,而不僅僅是從手機中刪除應用程序? – Nico 2015-02-11 04:38:17

+0

如果你只有db,根本沒有優勢。但如果你有更多的文件,你不想像圖像,文件等,它可能是有用的。 – 2015-02-11 04:45:21

+0

嗯好的。那麼我想我可能會有一個臨時按鈕來編程,因爲如果我必須一直這樣做,那麼解決方案可能會有點長。但是,謝謝你知道我們也可以這樣做。 – Nico 2015-02-11 05:04:10

相關問題