2012-07-16 35 views
0

我想篩選一個提取請求到CD,最初它的工作,但現在它返回一個空的數組。我已經檢查過實體(提供者)和我試圖過濾的關鍵名是正確的(providerName)。我已經檢查了SQLite數據庫和名稱與我正在尋找的providerName匹配的記錄。 (請參閱下面的附圖)。有人可以檢查我的代碼,看看我是否做錯了什麼?感謝:CoreData:篩選FetchRequest結果爲零

- (NSArray*) filterItemsFromCoreData : (NSArray*) filters { 

//create a managed object context 
NSManagedObjectContext* context = [self managedObjectContext]; 

//create error container and fetch request 
NSError* errMsg; 
NSFetchRequest* fetchRequest = [[NSFetchRequest alloc] init]; 

//get our filters from passed array 
NSString* filterProviderName = [filters objectAtIndex:0]; 
NSString* filterProviderZip = [filters objectAtIndex:1]; 
NSString* filterProviderPhone = [filters objectAtIndex:2]; 

//create predicate 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"providerName == %@", filterProviderName]; 

//create entity description 
NSEntityDescription *entity = [NSEntityDescription 
           entityForName:@"Provider" inManagedObjectContext:context]; 

//add entity and predicate to fetch request 
[fetchRequest setEntity:entity]; 
[fetchRequest setPredicate:predicate]; 

//get the objects 
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&errMsg]; 
NSLog(@"%@", fetchedObjects); 
return fetchedObjects; 
} 

實體屏幕捕捉 Entity Screen Cap

的SQLite數據庫 SQLite DB

+0

你確定你使用的是managedObjectContext?你應該在視圖控制器之間傳遞managedObjectContext而不是創建一個新的...請爲[self managedObjectContext] – ahmad 2012-07-16 12:54:29

+0

ahmad提供代碼,謝謝你的回覆。這發生在視圖控制器中,這裏創建了mod,請參閱下面的回覆以獲取更多詳細信息。 – PruitIgoe 2012-07-16 13:00:08

+0

您應該在AppDelegate中創建managedObjectContext,然後執行其中的一個if(self.managedObjectContext == nil){self.managedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];在你需要訪問它的任何類的viewDidLoad中。 – jacerate 2012-07-16 15:31:53

回答

0

更改格式說明%@在你的謂詞格式用單引號'%@'包圍。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"providerName == '%@'", filterProviderName];

這應該再次返回結果。

+0

此格式也是有效的謂詞= [NSPredicate predicateWithFormat:@「providerName =%@」,filterProviderName]; – ahmad 2012-07-16 13:04:01

+0

沒有骰子。我仍然在()。當我只在實體上運行請求時(沒有NSPredicate),它工作正常。 – PruitIgoe 2012-07-16 13:43:24