NSMutableArray到NSString转换提供数组而不是字符串

时间:2013-08-26 13:38:39

标签: iphone ios objective-c

这是我的界面:

@interface AddRatingViewController ()
    @property (nonatomic, copy) NSMutableArray *categoryFromDb;
@end

以下代码位于viewDidLoad方法:

NSManagedObjectContext *managedObjectContext = [self managedObjectContext];

NSFetchRequest *fetchRequest2 = [[NSFetchRequest alloc] initWithEntityName:@"Categories"];
[fetchRequest2 setPredicate:pre];

self.categoryFromDb = [[managedObjectContext executeFetchRequest:fetchRequest2 error:nil] mutableCopy];



if ([self.categoryFromDb count] > 0) {
    NSString *strUrl1 = [self.categoryFromDb valueForKey:@"rank1Img"];

}

NSLog表明,strUrl1的值为:

(
"assets-library://asset/asset.JPG?id=98E14854-7DA2-4B1F-9B0B-EEDCF3390DF3&ext=JPG"
)

但它应该只是:

  

资产库://asset/asset.JPG ID = 98E14854-7DA2-4B1F-9B0B-EEDCF3390DF3&安培; EXT = JPG

似乎strUrl1正在获取NSArray而不是字符串值。现在我的问题是,如何从字符串中删除此(" 要么, 我怎样才能获得字符串而不是数组? 或任何其他建议。

6 个答案:

答案 0 :(得分:1)

executeFetchRequest:error:会返回NSArray(正如您所注意到的)。 [NSArray valueForKey:]会返回NSArray,其中包含每个元素的rank1Img结果的结果。如果您只想要一个,那么您需要从categoryFromDbvalueForKey:的结果中选择一个元素。通常你会使用lastObject(当你认为只有一个元素时。


编辑:我注意到有几个答案建议使用objectAtIndex:0来提取数组的唯一元素。我推荐lastObject。如果您不正确,并且数组为空,则lastObject将返回nilobjectAtIndex:0抛出异常并可能导致程序崩溃。

答案 1 :(得分:1)

categoryFromDb的每个元素都属于“Categories”类。你能尝试以下方法: -

NSString *strUrl1 = [((Categories *)[self.categoryFromDb lastObject]) valueForKey:@"rank1Img"];

假设您有一个Categories类。

答案 2 :(得分:0)

在这种情况下获取第一个对象,如下所示:

NSString *strUrl1 = [[self.categoryFromDb valueForKey:@"rank1Img"] objectAtIndex:0];

答案 3 :(得分:0)

您可以通过以下方式执行此操作:

NSString * str = [[array valueForKey:@"rank1img"] componentsJoinedByString:@""];

答案 4 :(得分:0)

当您在NSArray上调用valueForKey时,它会遍历所有项目并从每个成员获取该键的值。它并不完全相同,但您可以将其视为其他语言中的map。您的数组显然只有一个元素,因此您可以保留代码,并将objectAtIndex:0添加到NSString *strUrl1 = [self.categoryFromDb valueForKey:@"rank1Img"];以获取第一个元素。如果您的处理不同,如果数组中有多个元素,则需要检查长度,然后对其进行适当处理。

答案 5 :(得分:0)

执行时获取请求会以NSArray的形式生成结果。然后使用键值编码创建另一个数组。 如果您在NSArray中有Person对象,那么

NSArray *array = [NSArray arrayWithObjects: person1, person2, person3,  nil];

比如说,如果你在模型Person上有一个peroperty,那么valueForKey:@“name”会产生一个包含每个模型名称的新数组。

NSArray *names = array[@"name"];

所以,如果你希望他们加入,你会这样做,

NSString *combinedName = [ array[@"name"] componentsJoinedByString:@""];