我有一個subclassed NSManagedObject符合MKAnnotation協議,它有緯度和經度的NSNumber屬性。如何在不使用setCoordinate的情況下更新註釋?
當我自己更改任何座標時,我使用setCoordinate:並更新setCoordinate:的執行內部的緯度和經度屬性。使用這種方法,地圖視圖更新註釋。但是,當我通過mergeChangesFromContextDidSaveNotification將更改與另一個NSManagedObjectContext合併時,不使用setCoordinate:因爲明確更改了經度和緯度屬性。這可以防止任何有關座標變化的KVO通知。
我試圖讓地圖視圖,實現協調與此代碼依賴於緯度和經度屬性:
+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key {
NSSet *keyPaths = [super keyPathsForValuesAffectingValueForKey:key];
if ([@"coordinate" isEqualToString:key]) {
NSSet *affectingKeys = [NSSet setWithObjects:@"latitude", @"longitude", nil];
keyPaths = [keyPaths setByAddingObjectsFromSet:affectingKeys];
}
return keyPaths;
}
但是該代碼產生此故障:
終止應用程序由於未捕獲異常「NSRangeException」,原因:'無法刪除關鍵路徑的座標「的觀察者,因爲它沒有註冊爲觀察者。
上時經緯度改變如何防止碰撞或其他方法來獲得送出的座標志願通知任何想法?謝謝參觀。
另外我想指出的是,因爲'座標'不是我的'NSManagedObject'中的建模屬性,所以我不得不返回'+(BOOL)contextShouldIgnoreUnmodeledPropertyChanges'的NO,沒有這個'自從我使用基本訪問器後,NSManagedObjectContext沒有保存更改。 – 2012-02-22 23:17:26