2013-02-08 90 views
0

我已經創建了一個CoreData模型並定義了我的實體和屬性。 我也創建的NSObject的類(名爲dbInterface)符合<NSFetchedResultsControllerDelegate>,並添加以下對象CoreData查詢

NSFetchedResultsController *fetchedResultsController; 
NSManagedObjectContext *managedObjectContext; 

這裏就是我很失落。我現在如何繼續從創建的sqlite3文件中獲取數據?

我的查詢,如果這是正確的使用條款,需要根據條件從我的一個實體中選擇某些記錄。我不知道如何在CoreData中編寫查詢或任何類型的查詢。

+2

「NSFetchedResultsController」的文檔包含詳細的示例代碼以及使用它的六個不同示例應用程序。你有沒有一個具體的問題答案? – 2013-02-08 18:05:24

+0

那麼現在我至少知道在哪裏看,謝謝!我被不同的網站拋棄,創建了模型包裝器和模型對象上下文。 – jacobronniegeorge 2013-02-08 18:15:08

回答

9

你可能不想要NSFetchedResultsController。結果控制器通常與UITableViewController一起用作輔助對象來填充表。

如果這就是你想要的,繼續。但是,如果您正在尋找從核心數據上下文中獲取實體,則只需要一個NSFetchRequest。假設你有一個名爲Person的核心數據對象。比方說,我們希望所有名爲「Ryan」的實體

NSFetchRequest *fetch = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; 

NSString *nameToGet = @"Ryan"; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@", nameToGet]; 
[fetch setPredicate:predicate]; 

NSError *error = nil; 
NSArray *results = [[self managedObjectContext] executeFetchRequest:fetch error:&error]; 
if(results) { 
    NSLog(@"Entities with that name: %@", results); 
    for(Person *p in results) { 
     NSLog(@"person = %@", p); 
    } 
    return results; 
} else { 
    NSLog(@"Error: %@", error); 
} 

return nil; 

因此您創建了一個提取請求。 NSPredicate就像SQL語句的where條件。所以你創建一個格式爲(there are tons of options for creating predicates)的謂詞。設置請求的謂詞,然後告訴你的managedObjectContext執行獲取請求。請求的任何結果都將返回到返回的數組中。數組中的每個對象都將是Person類型的對象。

如果您正在尋找使用NSFetchedResultsController,它基本上是相同類型的東西。但是,您使用1個不可變的提取請求創建控制器,因此它總是獲取相同的數據。如果你想要不同的數據,你需要創建另一個控制器。如果你只堅持NSFetchRequests(我從我的用戶界面中分配我的數據層,所以使用控制器對我來說並不是很有用),你可以查詢你想要的任何數據並返回結果。

+0

正如你所說,我不使用tableview ...我只是想查詢和搜索特定的記錄,並加載到一個數組。我認爲這是加載到數組中的正確方法? – jacobronniegeorge 2013-02-08 18:13:24

+1

是的,使用上面的代碼,'結果'數組是匹配核心數據上下文中謂詞的對象數組 – ColdLogic 2013-02-08 18:17:36

+0

拋出一個錯誤:'for(Person * p在結果中)'使用未聲明的標識符 – jacobronniegeorge 2013-02-08 18:38:52