2012-08-03 62 views
0

我注意到在一個完整的Core Data進程中有兩個不同的提取請求。Core Data中的兩個不同的提取請求

取請求甲: 上下文(MOC)例如從磁盤通過創建一個取請求並執行它(executeFetchRequest)獲取數據存儲器。

取請求乙: 一個FRC實例是init與另一讀取請求時,從存儲器中取出數據(指定context),以存儲器,這恰好自動所以無需「執行」這種取。取請求A和取請求乙

1.A和B的上下文必須取B的相同一個

2.結果之間

連接是取甲

的結果的子集

問題 我想知道我的理解是否絕對正確。請指出任何不準確的陳述和誤解。謝謝。

示例代碼

取A(執行顯式):從磁盤到存儲器

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Photo"]; 

request.predicate = [NSPredicate predicateWithFormat:@"unique = %@", [flickrInfo 
objectForKey:FLICKR_PHOTO_ID]]; 

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES]; 

request.sortDescriptors = [NSArray arrayWithObject:sortDescriptor]; 

NSError *error = nil; 

// execute the fetch  
NSArray *matches = [context executeFetchRequest:request error:&error]; 

取B(automatcally):從存儲器到存儲器

- (void)setupFetchedResultsController 
{ 
    NSFetchRequest *request = 
     [NSFetchRequest fetchRequestWithEntityName:@"Photo"]; 
    request.sortDescriptors = 
     [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"title" 
                        ascending:YES 
                         selector:@selector(localizedCaseInsensitiveCompare:)]]; 
    request.predicate = [NSPredicate predicateWithFormat:@"whoTook.name = %@", self.photographer.name]; 

    self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request 
                     managedObjectContext:self.photographer.managedObjectContext 
                      sectionNameKeyPath:nil 
                        cacheName:nil]; 
} 

回答

1

提取請求A.正確。

提取請求B.幾乎正確。您不知道FRC獲取數據的位置,如果它位於內存中或必須從商店中檢索。你不必在意,這是FRC的美麗。

關係1.相同的上下文。錯誤。背景與這段關係毫無關係。兩個實體A和B必須位於相同的數據模型中,而不是上下文。上下文主要用於獲取和保存。

關係2.子集。錯誤。如果您獲取實體A,則可以訪問其關係,但是您不知道在哪個時間實際檢索了多少數據(這稱爲錯誤)。核心數據將爲您處理。因爲可以以任何方式設置關係(一對多,多對多,一對一)並且可以爲空,所以關於子集的陳述是不正確的。例如:

// A --one-to-many--> B 
NSSet *bSet = anAObject.bRelationship; 

在這種情況下,集的確包含了所有的B實體的子集(如果有其他的),但是你看,這只是一個特例。在上面的代碼中,您還可以看到通過點符號可以方便地訪問關係實體。

+0

我想你誤解了帖子中「關係」的含義。你在談論作爲實體屬性的關係。但是在帖子中,「A和B之間的關係」意思是「獲取請求A和獲取請求B之間的連接是什麼」。這不是關於實體。 – Philip007 2012-08-04 21:29:22

+0

我在帖子中將「關係」一詞替換爲「連接」。希望它能澄清這個問題。 – Philip007 2012-08-04 21:33:16

相關問題