2014-05-01 53 views
0

我有一個名爲Route的實體,以及來自該實體的名爲LongitudeLatitude的兩個屬性。 該應用程序的功能很簡單:它將從LongitudeLatitude中獲取數據並創建一個NSArray。獲取核心數據中兩個屬性的正確方法

例如:

Route 1 has Longitude=2 and Latitude=41 
Route 2 has Longitude=3 and Latitude=42 
Route 3 has Longitude=4 and Latitude=43 

所以結果將是一個NSArray的與內容:

{ 
    [[CLLocation alloc] initWithLatitude:41 longitude:2], 
    [[CLLocation alloc] initWithLatitude:42 longitude:3], 
    [[CLLocation alloc] initWithLatitude:43 longitude:4], 
} 

但問題是,如果我取不同setupFetchedResultsController兩個屬性,我不能「連接「他們與他們合適的合作伙伴(我會得到2個分開的值列表)。是否有另一種方法來從2個屬性「連接」中獲取數據?

這是我的一個fetchedResultsController如果有人需要看到:

- (NSFetchedResultsController *)fetchedLatitudController 
{ 
    if (_fetchedLatitudController != nil) { 
     return _fetchedLatitudController; 
    } 

    // 1 - Decide what Entity you want 
    NSString *entityName = @"Route"; // Put your entity name here 

    // 2 - Request that Entity 
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:entityName]; 


    // 4 - Sort it if you want 
    request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"latitude" 
                        ascending:YES 
                         selector:@selector(localizedCaseInsensitiveCompare:)]]; 
    // 5 - Fetch it 
    self.fetchedLatitudController = [[NSFetchedResultsController alloc] initWithFetchRequest:request 
                     managedObjectContext:self.managedObjectContext 
                      sectionNameKeyPath:nil 
                        cacheName:nil]; 
    [self.fetchedLatitudController performFetch:nil]; 

    return _fetchedLatitudController; 
} 
+1

請顯示您的代碼。你如何獲取屬性? –

+0

我使用setupfetchedResultsController的通用模板來提取。 – Rodrigo

回答

0

沒有必要使用獲取結果控制器。獲取結果控制器 (默認情況下)獲取您的託管對象子類的對象,然後您可以查詢 獲取所有屬性。例如:

Route *route = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
NSNumber *lng = route.longitude; 
NSNumber *lat = route.latitude; 

但是注意,讀取的結果控制器典型地與表視圖(或 集合視圖)使用。如果你只是想創建一個數組,那麼你可以執行簡單 讀取請求,而不是:

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Route"]; 
NSError *error; 
NSArray *fetchedObjects = [context executeFetchRequest:request error:&error]; 
if (fetchedObjects == nil) { 
    // Some error occurred ... 
} else { 
    for (Route *route in fetchedObjects) { 
     NSNumber *lng = route.longitude; 
     NSNumber *lat = route.latitude; 
     CLLocation *loc = [[CLLocation alloc] initWithLatitude:[lat doubleValue] longitude:[lng doubleValue]]; 
     // ... add loc to your array ... 
    } 
} 

如果「路線」實體有許多屬性,那麼它可能是更有效 設置

[request setResultType:NSDictionaryResultType]; 
[request setPropertiesToFetch:@[@"longitude", @"latitude"]]; 

獲取只有你所感興趣的屬性,然後fetchedObjects是 的詞典,從中你可以創建CLLocation數組秒。

+0

我的答案假設屬性的小寫名稱(「經度」,「緯度」)更常見。 –

+0

完美!謝謝! – Rodrigo