2010-10-13 115 views
0

我遇到了另一個問題,我的Iphone應用程序無法解決我自己。 我在我的最新應用中實現了一種組織者功能。 在那裏可以創建約會,這些約會顯示在tableview中並保存在CoreDataStore中。我用4類:更改核心數據項崩潰應用程序

  • 哪裏約會顯示
  • 與文本框,以便投入值地點和約定的名稱概述(創建/編輯視圖)
  • 與DatePicker的一個視圖定義啓動 - 和ENDDATE
  • 控制器,其處理使用該方法的產品創建和刪除:

的代碼:

-(void)createAppointmentObjectWithDate:(NSDate *) 
        appointmentDate name:(NSString *)appointmentName 
          description:(NSString *)appointmentDescription 
           eDate:(NSDate *)appointmentEndDate 
{ 
    NSManagedObjectContext *managedObjectContext = [[CoreDataManager sharedManager] managedObjectContext]; 
    AppointmentObject *newAppointmentObject = [NSEntityDescription insertNewObjectForEntityForName:AppointmentObjectEntityName 
                      inManagedObjectContext:managedObjectContext];  
    newAppointmentObject.appointmentName = appointmentName; 
    newAppointmentObject.appointmentDescription = appointmentDescription; 
    newAppointmentObject.appointmentDate = [appointmentDate earlierDate:appointmentEndDate]; 
    newAppointmentObject.appointmentEndDate = [appointmentEndDate laterDate:appointmentDate]; 
} 

-(void)deleteAppointmentObject:(AppointmentObject *)appointmentObject triggeredByUser:(BOOL)byUser{ 
    NSManagedObjectContext *managedObjectContext = [[CoreDataManager sharedManager] managedObjectContext]; 
    [managedObjectContext deleteObject:appointmentObject]; 
} 

但所有種類的瘋狂的事情正在發生,這使得我的應用程序崩潰與「SICBART」消息:

2010-10-13 17:35:04.630 didacta[109:307] Serious application error. Exception was  caught during Core Data change processing. 
This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification. 
-[CALayer controllerWillChangeContent:]: unrecognized selector sent to instance 0x19f150 with userInfo (null) 
2010-10-13 17:35:05.118 didacta[109:307] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[CALayer controllerWillChangeContent:]: unrecognized selector sent to instance 0x19f150' 

中出現錯誤,而這樣做:

  • 創造新的任命和按「完成「(應觸發創建和彈出概述)
  • 更改約會並按下」完成「(應發送更改並彈出概述)
  • 點擊關於指定換貨的概述(應該彈出創建/編輯視圖,交出值)
  • 刪除項目

有時我甚至可以刪除約會,但隨後的項目中實現代碼如下順序以某種方式得到扭轉,在tableview的索引不再指向約會的索引。

回答

3

對。

-[CALayer controllerWillChangeContent:]: unrecognized selector sent to instance 0x19f150 with userInfo (null)

這是你的錯誤。你有一個NSFetchedResultsController,它的委託是一個CALayer。這聽起來像原來的代表被釋放,CALayer分配使用相同的內存區域。解決的辦法是找到有問題的-dealloc,並假設您使用屬性添加類似self.myFetchedResultsController.delegate = nil; self.myFetchedResultsController = nil;的東西。

你有時可以有助於使殭屍調試這樣的事情(轉到項目→編輯當期可執行左右,選擇環境,添加NSZombieEnabled環境變量,並將其值設置爲「YES」或左右;取消選中該複選框時你已經完成調試)。當消息發送到解除分配的對象時,殭屍會引發異常。 (殭屍不會在默認情況下解除分配,因此您的應用程序將會有效泄漏;請記住取消選中複選框!)。

+0

我再次搜索了代碼,但是沒有地方可以取消分配代理。但現在我終於可以重現一個錯誤:我的約會按日期排序。當我更改某個項目的日期時,由於某種原因,Tableview停止刷新。但是,我通過fetchedResults控制器得到的項目順序仍然正確(在正確的位置使用更改日期的項目)。我通過viewWillAppear中的「reloaddata」更新Tableview。這可能是一個痕跡? – Amandir 2010-10-14 16:17:06

+0

更確切地說:CellForRow不再被調用。不是通過委託而是通過reloadData。當我關閉應用程序並重新啓動它。約會是正確的順序和tableView的更新再次工作。 – Amandir 2010-10-14 16:54:14

+0

他意味着您要麼取消分配獲取的結果控制器的委託,要麼已將CALayer分配爲委託。當您更改數據時,CALayer將收到委託錯誤。如果錯誤是一致的,那麼您已將CALayer指定爲代碼中的代理。 – TechZen 2010-10-15 21:42:31

-2

「無法識別的選擇器」使它聽起來像也許你的數據模型不包含你試圖使用的一些實體屬性。例如,也許你正試圖設置不存在的對象的屬性。

嘗試在newAppointmentObject.appointmentName = appointmentName;處創建一個斷點並逐步查看錯誤發生的位置。