2012-11-30 77 views
0

實體包含CLPlacemark財產。 我想檢查city字符串是否與地標的局部屬性匹配。NSFetchedResultsController崩潰謂詞CONTAINS

崩潰發生在performFetch當我在謂語使用CONTAINS

predicate = [NSPredicate predicateWithFormat:@"placemark.locality CONTAINS[cd] %@", city]; 
[_fetchedResultsController.fetchRequest setPredicate:predicate]; 
     NSError *error = nil; 
     if (![[self fetchedResultsController] performFetch:&error]) { 
      NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
      abort(); 
     } 

回答

0

被保存在覈心數據不能是CLPlacemark因爲核心數據不支持這種類型的地標。

那麼,你的謂詞中的placemark是一個NSManagedObject類型爲NSString的屬性locality?如果不是這樣,崩潰不是由於CONTAINS而是由於試圖訪問不存在的屬性placemark.locality的謂詞。

因此,如果您的地標保存在覈心數據的二進制數據類型,你不能訪問它的組件,你可以不寫謂詞指的是其局部性。

+0

標的是可轉換的類型,並在實體類它設置爲CLPlacemark。好的,謝謝,我想我會嘗試創建getter方法的地方在課堂上解決 – Shmidt

+0

如果它是一個可轉換的類型,你不能在謂詞訪問'locality'。你必須製作一個'Placemark'實體。對於新的地標實體,您可以添加您感興趣並想要保存到Core Data的CLPlacemark的任何屬性(如'locality')。因此,您不會在Core Data中擁有完整的ClPlacemark,但您將能夠訪問其組件,或者至少可以創建屬性的一次。 –

+1

我希望這是有幫助的,而且很清楚。可轉換屬性作爲NSData保存在Core Data中。所以,一個獲取請求只會看到一個NSData數據塊,並且NSData將不會被轉換回CLPlacemark,直到它從Core Data中被檢索出來爲止。換句話說,獲取請求將無法看到CLPlacemark的組件,因爲它已被轉換爲NSData以存儲在Core Data中。而且,由於謂詞試圖訪問'locality',並且'locality'在覈心數據中不存在,它會崩潰。 –

相關問題