【问题标题】:Why can I not get a properly formatted string from NSArray element?为什么我不能从 NSArray 元素中获取格式正确的字符串?
【发布时间】:2014-11-10 07:42:18
【问题描述】:

我正在尝试从我的核心数据模型中检索一个属性,并将获取的字符串放入我的导航栏的标题中。我一定是做错了什么,因为我无法将检索到的字符串设置为标题,但如果我手动输入字符串,我可以设置标题。

这是我从 Core Data 中检索的方式:

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:]: unrecognized selector sent to instance”,当我将它设置为测试变量时它设置得很好。

我还注意到变量 test 的 NSLog 是“test”,而 area_name 的 NSLog 输出是:(“Single Area”)

这是因为我如何从数组中检索我的 area_name 吗?我应该改用字典吗?请原谅我的无知,我对 obj-c 还很陌生。

谢谢。

【问题讨论】:

  • 'area' 数组将保存核心数据中符合您的谓词的所有对象。您需要找到您想要的并将其转换为它的类的对象。然后您可以访问它的属性。

标签: objective-c xcode core-data


【解决方案1】:

这里是错误

NSString *area_name = [area valueForKey:@"name"];  

area 对象是 NSArray 的类型,其中包含 Area 对象。
所以你需要从那个数组中获取元素,然后读取name

Area *firstArea = [area firstObject];
NSString *area_name = firstArea.name;
NSLog(@"%@",area_name);

【讨论】:

  • 做到了。在我项目的其他几个领域,我已经使用我展示的方法获取了核心数据并设置了字符串,并且它已经奏效了。例如cell.textLabel.text = area_name;这样做是不是不正确,我每次都需要使用 Area 对象吗?
【解决方案2】:

把谓词改成这样:

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"identifier = %@", self.area_id];

我想 self.area_id 是正确初始化的。

【讨论】:

    猜你喜欢
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 2022-01-21
    • 2020-07-23
    相关资源
    最近更新 更多