1

这是我的界面:

@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"
)

但它应该只是:

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

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

4

6 回答 6

1

categoryFromDb 的每个元素都属于“类别”类。您可以尝试以下方法:-

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

假设您有一个 Categories 类。

于 2013-08-26T13:46:06.943 回答
1

executeFetchRequest:error:返回一个NSArray(如您所见)。[NSArray valueForKey:]返回一个NSArray由每个元素的结果组成的rank1Img结果。如果您只想要一个,那么您要么需要categoryFromDbvalueForKey:. 通常你会使用lastObject这个(当你相信只有一个元素时。


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

于 2013-08-26T13:43:23.583 回答
0

执行时的 fetch 请求以 NSArray 的形式产生结果。然后,您使用创建另一个数组的键值编码。如果你像这样在 NSArray 中有 Person 对象,

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

比如说,如果你对模型 Person 有一个属性,那么 valueForKey:@"name" 将产生一个新数组,其中包含每个模型的名称。

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

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

NSString *combinedName = [ array[@"name"] componentsJoinedByString:@""];
于 2013-08-26T13:45:16.940 回答
0

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

NSString *strUrl1 = [[self.categoryFromDb valueForKey:@"rank1Img"] objectAtIndex:0];
于 2013-08-26T13:43:20.440 回答
0

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

NSString * str = [[array valueForKey:@"rank1img"] componentsJoinedByString:@""];
于 2013-08-26T13:43:20.787 回答
0

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

于 2013-08-26T13:44:11.977 回答