2012-08-28 33 views
0

我有一個核心數據模型,像這樣:NSPredicate問題 - 沒有找到數據

ArticleCache: 
- NSString *link 

而且我有一些自定義對象,像這樣:

Article: 
- NSString *linkString //NSString version of link 
- NSURL *link 
- NSString *title 

我有ArticleNSArray S( articleList以下),我有一個核心數據存儲與ArticleCache s。

我試圖找回ArticleCache S作在我articleList匹配的鏈接:

NSEntityDescription *articleCacheObjectModel = [NSEntityDescription entityForName:@"ArticleCache" inManagedObjectContext:backgroundContext]; 

// Setup the fetch request 
NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
[request setEntity:articleCacheObjectModel]; 

//search will return all items matching the link 
NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:@"link in %@", articleList]; 
[request setPredicate:searchPredicate]; 

NSError *error = nil; 

NSArray *results = [backgroundContext executeFetchRequest:request error:&error]; 

當我運行此,results總是空的,儘管我知道那裏的核心是匹配的ArticleCaches數據存儲。我知道這一點,因爲如果我從請求中刪除謂詞,我會得到所有的ArticleCache,我可以打印出它們各自的link並對它們進行比較。

任何想法?

回答

2

「ArticleCache」實體的「鏈接」屬性是一個字符串,並且在謂詞中嘗試測試該字符串是否包含在Article對象的數組中。那永遠不會匹配。

您可以先構建一個字符串URL數組,例如,

NSArray *urlList = [articleList valueForKey:@"linkString"]; 

,然後使用於斷言:

[NSPredicate predicateWithFormat:@"link in %@", urlList]; 
+0

DERP。謝謝。出於某種原因,我雖然神奇的NSPredicate會通過我的對象看。事實上,它*與每個'Article'的'title'屬性進行比較(無論出於何種原因)。 –