2012-07-02 44 views
1

我收到sigbart錯誤在此行中我的代碼:SIGBART上[NSFetchedResultsController頁頭] initWithFetchRequest

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"ViewTwo"]; 

,這是方法:

- (NSFetchedResultsController *)fetchedResultsController 
{ 
if (__fetchedResultsController != nil) { 
    return __fetchedResultsController; 
} 

// Set up the fetched results controller. 
// Create the fetch request for the entity. 
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
// Edit the entity name as appropriate. 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyData" inManagedObjectContext:self.managedObjectContext]; 
[fetchRequest setEntity:entity]; 

// Set the batch size to a suitable number. 
[fetchRequest setFetchBatchSize:20]; 

// Edit the section name key path and cache name if appropriate. 
// nil for section name key path means "no sections". 
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"ViewTwo"]; 

aFetchedResultsController.delegate = self; 
self.fetchedResultsController = aFetchedResultsController; 

NSError *error = nil; 
if (![self.fetchedResultsController performFetch:&error]) { 
    /* 
    Replace this implementation with code to handle the error appropriately. 

    abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
    */ 
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    abort(); 
} 

return __fetchedResultsController; 
} 

但是,這是一個奇怪的錯誤,因爲在控制檯中不給我任何解釋,所以我不明白我做錯了什麼。

+0

您使用ARC嗎? – 8vius

+0

是的,我正在使用弧,爲什麼? – Piero

+0

請在SIGBART發生時發佈您在控制檯中獲得的輸出。 – 8vius

回答

5

NSFetchedResultsController需要一個排序描述符和一個託管對象上下文你沒有提供排序描述符,所以你必須給

+0

非常感謝你!你有權利! – Piero

0

很奇怪,沒有輸出爲SIGBART,嘗試運行指令(打步過看它是否輸出。

你需要做的是檢查你發送的方法,每一個元素(通過日誌記錄)很可能其中一個實際上是零或在呼叫執行之前被解除引用

0

您可能修改了您的xcdatamodled,但未在設備上重新安裝您的應用。

只需刪除在您的設備上建立的應用程序並重新構建它,一切都會好的。

這裏是蘋果說:

中止()將導致產生崩潰日誌和應用程序終止。您不應該在運輸應用程序中使用此功能,儘管它在開發過程中可能很有用。

此處錯誤的典型原因包括: *持久存儲不可訪問; *持久性存儲的模式與當前的託管對象模型不兼容。 檢查錯誤消息以確定實際問題是什麼。

如果持久存儲不可訪問,則文件路徑通常有問題。通常,文件URL指向應用程序的資源目錄,而不是可寫目錄。

如果您在開發過程中遇到的一個架構的不兼容性錯誤,則可以通過減少它們的頻率: *只需刪除現有的商店:

[[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil] 
  • 在通過下面字典作爲選項進行自動輕量級遷移參數:

    [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; 
    

    輕量級遷移僅適用於一組有限的模式更改;有關詳細信息,請參閱「核心數據模型版本控制和數據遷移編程指南」。