这是我的界面:
@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
而不是字符串值。现在我的问题是,如何从字符串中删除此("
要么,
我怎样才能获得字符串而不是数组?
或任何其他建议。
答案 0 :(得分:1)
executeFetchRequest:error:
会返回NSArray
(正如您所注意到的)。 [NSArray valueForKey:]
会返回NSArray
,其中包含每个元素的rank1Img
结果的结果。如果您只想要一个,那么您需要从categoryFromDb
或valueForKey:
的结果中选择一个元素。通常你会使用lastObject
(当你认为只有一个元素时。
编辑:我注意到有几个答案建议使用objectAtIndex:0
来提取数组的唯一元素。我推荐lastObject
。如果您不正确,并且数组为空,则lastObject
将返回nil
。 objectAtIndex: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:@""];