将 fetch 中的单个字段选择到数组中以加载选择器

Posted

技术标签:

【中文标题】将 fetch 中的单个字段选择到数组中以加载选择器【英文标题】:Selecting a single field in a fetch into an array to load a picker 【发布时间】:2012-01-21 19:24:28 【问题描述】:

尝试将单个字段加载到数组中,然后将其加载到选择器中。我认为我在创建数组时遇到了问题。

这是我的代码:

NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescr];
[request setPropertiesToFetch:[NSArray arrayWithObject:@"name"]];

NSError *error;
NSArray *array = [managedObjectContext executeFetchRequest:request error:&error];
self.pickerData = array;

我得到的错误是这样的:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[NSManagedObject isEqualToString:]:无法识别的选择器已发送到实例 0x7bb8100”

任何帮助将不胜感激......

【问题讨论】:

似乎是选择器委托中的问题,您可能会比较错误的对象,您也可以发布一些选择器委托的代码。 在你看到的最后一行之后我所做的就是 [vPicker reloadAllComponents];我通过 NSArray *array = [[NSArray alloc] initWithObjects:@"data", @"data 1", @"data 2",nil];然后将这部分注释掉 评论后有效吗? 用@"data" 等创建的假数组的部分.. 工作....所以我想我可以缩小范围,只将单个字段从 fetch 加载到数组中并离开剩下的一个人,但...... 【参考方案1】:

我的猜测是您假设 pickerData 数组中的对象是 NSString 实例,而实际上它们是 NSManagedObject 实例。为了获取名称字段的值,您应该执行以下操作:

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 

    NSManagedObject *managedObject = [self.pickerData objectAtIndex:row];
    NSString *name = [managedObject valueForKey:@"name"];

    return name;

【讨论】:

【参考方案2】:

请浏览 NSManaged Object 的文档- http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/CoreDataFramework/Classes/NSManagedObject_Class/Reference/NSManagedObject.html

然后正确地获取数据并传递给 Picker。 主要问题是对象比较错误,因为哪个应用程序崩溃了。

【讨论】:

以上是关于将 fetch 中的单个字段选择到数组中以加载选择器的主要内容,如果未能解决你的问题,请参考以下文章

如何设置选择器视图以显示来自多个矩阵选项的数据?

如何将键映射到 MySQL 选择查询中单个字段的值

Excel VBA将数组变量插入到访问中的单个字段中

通过将单个消息发布到 kafka 来更新 mysql 中的多个字段

如何按选择的顺序将多个文件上传到 Firebase 存储?

如何在 ios 4 中以编程方式将图像数组添加到 Imageview?