我的應用程序將允許用戶從大量事件列表中創建個性化的事件列表。我有一個簡單地顯示這些事件的表格視圖,點擊其中一個將用戶帶到事件詳細信息視圖,該視圖有一個「添加到我的事件」按鈕。在覈心數據中插入新的關係數據
在此詳細視圖中,我擁有原始事件對象,通過NSFetchedResultsController
檢索並傳遞給詳細視圖(通過表格單元格,與核心數據配方示例相同)。從這個「事件」中檢索/顯示信息沒有問題。然後我試圖將它添加到由一個代表MyEvents
列表許多(逆)關係:
alt text http://www.imgplace.com/img580/8008/44relationship.png
此代碼:
NSManagedObjectContext *context = [event managedObjectContext];
MyEvents *myEvents = (MyEvents *)[NSEntityDescription insertNewObjectForEntityForName:@"MyEvents" inManagedObjectContext:context];
[myEvents addEventObject:event];//ERROR
而這個代碼(如下建議):
//would this add to or overwrite the "list" i am attempting to maintain
NSManagedObjectContext *context = [event managedObjectContext];
MyEvents *myEvents = (MyEvents *)[NSEntityDescription insertNewObjectForEntityForName:@"MyEvents" inManagedObjectContext:context];
NSMutableSet *myEvent = [myEvents mutableSetValueForKey:@"event"];
[myEvent addObject:event]; //ERROR
博特產生(在由//錯誤指示的線):
*** -[NSComparisonPredicate evaluateWithObject:]: message sent to deallocated instance
似乎我可能錯過了一些基本的東西。我無法通過使用調試工具收集更多信息,並瞭解他們的情況。
1)這是一個有效的方式來編譯和存儲這樣的可編輯列表嗎?
2)有沒有更好的方法?
3)什麼可能是錯誤的解除分配的實例?
-
我現在已經修改了事件實體有一個名爲「myEvents」一個一對多的關係,其引薦本身。我可以添加事件到這個罰款,記錄對象顯示[event addMyEventObject:event];
之後出現的關係正確的內存地址。然而,同樣的失敗發生在此之後。我仍然無法理解發生了什麼問題。這是回溯
#0 0x01f753a7 in ___forwarding___()
#1 0x01f516c2 in __forwarding_prep_0___()
#2 0x01c5aa8f in -[NSFetchedResultsController(PrivateMethods) _preprocessUpdatedObjects:insertsInfo:deletesInfo:updatesInfo:sectionsWithDeletes:newSectionNames:treatAsRefreshes:]()
#3 0x01c5d63b in -[NSFetchedResultsController(PrivateMethods) _managedObjectContextDidChange:]()
#4 0x0002e63a in _nsnote_callback()
#5 0x01f40005 in _CFXNotificationPostNotification()
#6 0x0002bef0 in -[NSNotificationCenter postNotificationName:object:userInfo:]()
#7 0x01bbe17d in -[NSManagedObjectContext(_NSInternalNotificationHandling) _postObjectsDidChangeNotificationWithUserInfo:]()
#8 0x01c1d763 in -[NSManagedObjectContext(_NSInternalChangeProcessing) _createAndPostChangeNotification:withDeletions:withUpdates:withRefreshes:]()
#9 0x01ba25ea in -[NSManagedObjectContext(_NSInternalChangeProcessing) _processRecentChanges:]()
#10 0x01bdfb3a in -[NSManagedObjectContext processPendingChanges]()
#11 0x01bd0957 in _performRunLoopAction()
#12 0x01f4d252 in __CFRunLoopDoObservers()
#13 0x01f4c65f in CFRunLoopRunSpecific()
#14 0x01f4bc48 in CFRunLoopRunInMode()
#15 0x0273878d in GSEventRunModal()
#16 0x02738852 in GSEventRun()
#17 0x002ba003 in UIApplicationMain()
解決方案
我設法去的這條底線。
我正在使用NSFetchedResultsController
和NSPredicate
來提取有問題的事件,我在發佈結果後發佈了這個消息。從返回的實體中檢索值是沒有問題的,但是當我試圖更新其中的任何一個時,它給出了上述錯誤。它不應該被釋放。
奧斯坦丁我的問題
什麼是一個好辦法,從現有的項目列表中的一個核心數據模型而言,這分名單的一部分。我不相信我在這裏嘗試過的任何方式。我需要在另一個表格視圖中顯示/編輯它。也許有比每個事件實體的布爾屬性更好的方法?上面的關係想法在這裏似乎不起作用(儘管我現在可以創建它)。
乾杯。
爲什麼你需要MyEvents?如果您只是將它用作容器對象,請改用'NSFetchedResultsController'。 – falconcreek 2010-04-06 16:11:53
我認爲你仍然可能不需要一個單獨的實體。您可以創建一個類似於員工 - 經理的直接報告關係的一對多關係。在這種情況下,您可以創建事件 - 收藏夾事件<-->>收藏夾。查看http://developer.apple.com/mac/library/documentation/DeveloperTools/Conceptual/XcodeCoreDataTools/Introduction/Introduction.html – falconcreek 2010-04-08 13:20:20
我嘗試了一些與此有關的事情 - 請參閱有關更新;或許我的模型現在不是最好的,但我不認爲它是我看到的問題的原因。 – michael 2010-04-10 02:26:36