2

通常,如果我有一个只有 NSString 的 NSArray,我可以使用 NSArray 的方法:

- (NSString *)componentsJoinedByString:(NSString *)separator

得到一个字符串(如“约翰,大卫,彼得”)。但是,如果我有一个核心数据实体对象的 NSArray,并且我只需要在其中获取 1 个属性(例如,每个实体对象的“名称”属性),那么最简单的方法是什么?

Core Data 实体对象可以有许多属性(姓名、电话、生日),但我只想要一个像“John,David,Peter”这样的字符串。

4

5 回答 5

3

以下将仅获取对象的name属性Person

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];
request.propertiesToFetch = @[@"name"];
request.resultType = NSDictionaryResultType;
NSArray *array = [managedObjectContext executeFetchRequest:request error:nil];
NSString *names = [[array valueForKey:@"name"] componentsJoinedByString:@","];
NSLog(@"%@", names);

您需要将 设置resultTypeNSDictionaryResultType否则它将忽略propertiesToFetch。提取的结果是一个字典数组。使用valueForKeyandcomponentsJoinedByString将从所有名称中创建一个字符串。

于 2012-10-20T21:31:03.307 回答
0

您最好的选择是通过迭代数组中的项目并询问每个项目的名称以在appendString:. 您可以向实体对象添加一个description方法,然后使用您提到的方法,但description用于其他事情并且可能会导致冲突。

于 2012-10-20T21:01:41.970 回答
0
// Assuming you have the list of entities - NSArray *entityObjects 
NSMutableString *nameAttributes = [[NSMutableString alloc] init];
for(int i = 0; i < [entityObjects count]-1; i++){
    [nameAttributes appendString:[NSString stringWithFormat:@"%@, ", [entityObjects objectAtIndex:i].name]];
}
    [nameAttributes appendString:[NSString stringWithFormat:@"%@", [entityObjects lastObject].name]];
于 2012-10-20T21:09:25.057 回答
0

如果您有一个NSArray *objectsCore Data 对象,每个对象都有一个name属性,那么您可以使用

NSArray *names = [objects valueForKey:@"name"];

得到一个包含所有名称的新数组,然后您可以将其连接起来

NSString *allNames = [names componentsJoinedByString:@","];
于 2012-10-20T21:11:30.637 回答
0

你可以简单地这样做,

NSString *toCollectString =@"";

for(int k =0;k<self.arrayHoldingObjects.count;k++)
{
   ModelName *model = [self.arrayHoldingObjects objectAtIndex:k];  
   NSString *str = model.name;
   toCollectString = [toCollectString stringByAppendingString:str];  
}

您将在toCollectString.

于 2012-10-20T22:19:46.343 回答