2014-05-01 56 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