我試圖執行一個獲取對與該測試針對存在於一個抽象類的某些子類一的keyPath謂語管理對象的上下文請求。CoreData通過抽象的管理對象獲取請求到具體管理對象
例如這裏是對象模型的一部分
Library::NSManagedObject
- AllMovies::to-many relationship->Movie
Movie::NSManagedObject (abstract)
- type::String
- name::String
- mylibrary::to-one relationship->Library
HorrorMovie::Movie
- monster::String
- ghosts::BOOL
RomanceMovie::Movie
- percociouskid::String
- hasferret::BOOL
如果我設置以下取請求
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Library"
inManagedObjectContext:moc];
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:entityDescription];
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"(SUBQUERY(AllMovies, $movies,
$movies.type like[c] 'horror' and
$movies.moster like[c] 'yeti'
)[email protected] != 0)"
]
[request setPredicate:predicate];
NSArray *array = [moc executeFetchRequest:request error:&error];
執行讀取請求返回像
keypath $movies.monster not found in entity <NSSQLEntity Movie id=2>
錯誤
似乎沒有辦法對謂詞進行懶惰評估。我已經嘗試過的其他一些事情是使用CAST關鍵字的ANY謂詞,嘗試用另一個SUBQUERY替換SUBQUERY中的「AllMovies」以返回一組匹配'type'值的對象。
這將有可能做對每個符合條件的類型的多個請求,但畢竟是毛,緩慢和笨拙。
這是在OS X 10.6下的SQL持久性存儲。由於我正在與100萬個「圖書館」合作(該項目與電影沒有任何關係,但我認爲這是一個很好的例子),因此在內存商店中做內存是不可取的。
感謝, 羅布
Core Data 2017有什麼好的解決方案? – Goppinath