将 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 中的单个字段选择到数组中以加载选择器的主要内容,如果未能解决你的问题,请参考以下文章