我尝试从核心数据模型中检索属性,并将获取的字符串放入导航栏的标题中。我一定做错了,因为我无法将检索到的字符串设置为标题,但如果我手动输入字符串,我可以设置标题。
以下是我从核心数据中检索的方式:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Area" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
//set predicate
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"identifier == %@", self.area_id];
NSArray *area = [context executeFetchRequest:fetchRequest error:&error];
NSString *area_name = [area valueForKey:@"name"];
NSString *test = @"test";
NSLog(@"%@",test);
NSLog(@"%@",area_name);
当我使用self.tabBarController.title = area_name设置标题时;我得到" NSArrayI stringByTrimmingCharactersInSet:]:无法识别的选择器发送到实例"当我将它设置为测试变量时,它设置得很好。
我还注意到变量测试的NSLog是" test"而area_name的NSLog输出是:("单区")
这是因为我从数组中检索我的area_name吗?我应该使用字典吗?原谅我的无知,我对obj-c来说相当新鲜。
感谢。
答案 0 :(得分:1)
这是错误
NSString *area_name = [area valueForKey:@"name"];
area
对象是NSArray
的类型,其中包含Area
个对象
所以你需要从该数组中获取元素,然后阅读name
。
Area *firstArea = [area firstObject];
NSString *area_name = firstArea.name;
NSLog(@"%@",area_name);
答案 1 :(得分:0)
将谓词更改为:
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"identifier = %@", self.area_id];
我想假设self.area_id正确初始化。