Core data 将coredata表中的数据检索到UIPickerView(文本字段内)

Core data 将coredata表中的数据检索到UIPickerView(文本字段内),core-data,nsmutablearray,uipickerview,nsfetchrequest,Core Data,Nsmutablearray,Uipickerview,Nsfetchrequest,我想从Main.xcdatamodeld(coredata)的“表”中检索类型列表,以放入UIPickerView。此实体“类型”只有一个属性“名称”(字符串) 如果我在NSMutableArray中放入一些字符串,它将非常有效。UIPickerView显示字符串。上面是简单的NSMutableArray resultFetch = [[NSMutableArray alloc]initWithObjects:@"Electronics",@"School",@"Kitchen",@"Offic

我想从Main.xcdatamodeld(coredata)的“表”中检索类型列表,以放入UIPickerView。此实体“类型”只有一个属性“名称”(字符串)

如果我在NSMutableArray中放入一些字符串,它将非常有效。UIPickerView显示字符串。上面是简单的NSMutableArray

resultFetch = [[NSMutableArray alloc]initWithObjects:@"Electronics",@"School",@"Kitchen",@"Office", nil];
但是当我从coredata中提取数据时,我得到了一个错误。下面是代码

AddItemViewController.m

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.

nameField.text = [self.currentItem name];
locationField.text = [self.currentItem location];
//typeField.text = [self.currentItem type];
quantityField.text = [[self.currentItem quantity] stringValue];

self.nameField.delegate = self;
self.locationField.delegate = self;
//self.typeField.delegate = self;
self.quantityField.delegate = self;
NSLog(@"ViewDidload before put fetch in array");
//Put fetch in NSArray resultFetch

AppDelegate *myApp = (AppDelegate *) [[UIApplication sharedApplication]delegate];

resultFetch = [[NSMutableArray alloc] init];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Type" inManagedObjectContext:[myApp managedObjectContext]];
[fetchRequest setEntity:entity];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];

NSError *error;
NSArray *fetchedObjects = [[myApp managedObjectContext] executeFetchRequest:fetchRequest error:&error];

for (Type *t in fetchedObjects) {

    [resultFetch addObject:t];
    NSLog(@"resultFetch: %@", resultFetch);

}

//Define typePicker
typePicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0,43,320,480)];
typePicker.delegate = self;
typePicker.dataSource = self;
[typePicker setShowsSelectionIndicator:YES];
typeField.inputView = typePicker;

//Create done button in UIPickerView
myPickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 56)];
myPickerToolbar.barStyle = UIBarStyleBlackOpaque;
[myPickerToolbar sizeToFit];

NSMutableArray *barItems = [[NSMutableArray alloc] init];
UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
[barItems addObject:flexSpace];

UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(pickerDoneClicked)];
[barItems addObject:doneBtn];
[myPickerToolbar setItems:barItems animated:YES];
typeField.inputAccessoryView = myPickerToolbar;
 NSLog(@"End ViewDidLoad");

}

-(void)pickerDoneClicked
{
NSLog(@"Done Clicked");

[typeField resignFirstResponder];
myPickerToolbar.hidden=YES;
typePicker.hidden=YES;
}

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return [resultFetch count];
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return [resultFetch objectAtIndex:row];
}

- (void) pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
typeField.text = [resultFetch objectAtIndex:row];
}
错误是:

2013-11-14 10:31:53.099存储[1226:70b]在将提取放入数组之前加载ViewDidload

2013-11-14 10:31:53.102存储[1226:70b]结果蚀刻:( “(实体:类型;id:0x8a83e50;数据:)” )

2013-11-14 10:31:53.103存储[1226:70b]结果蚀刻:( “(实体:类型;id:0x8a83e50;数据:)”, “(实体:类型;id:0x8a6ae80;数据:)” )

2013-11-14 10:31:53.104存储[1226:70b]结果蚀刻:( “(实体:类型;id:0x8a83e50;数据:)”, “(实体:类型;id:0x8a6ae80;数据:)”, “(实体:类型;id:0x8aa9650;数据:)” )

2013-11-14 10:31:53.107存储[1226:70b]结束视图加载

2013-11-14 10:31:57.148存储[1226:70b]-[Type length]:发送到实例0x8aa08e0的无法识别的选择器

它不显示数据库中的类型名称。 您能帮助我正确地获取这个“表”以将这些属性字符串放入UIPickerView中吗?我想要的只是一个漂亮的NSMutableArray,我可以使用它!:)

非常感谢你的帮助


宝拉

问题解决了!更改了[resultFetch addObject:t]中语句的内部行;到[resultFetch addObject:t.name];。
好像垃圾太多了!:)

您在哪里使用“type.length”?这就是应用程序崩溃的原因。您正在访问托管对象“类型”,但该对象没有名为“length”的属性/方法。假设需要获取的对象数,则可能需要将“type.length”替换为“resultFetch.count”。此外,还可以替换NSLog(@“resultFetch:%@”,resultFetch);通过NSLog(@“resultFetch:%@”,t.name);记录实际字符串值。嗨,Leijonien。我更改了NSLog,现在可以看到类型值。我在我的代码中看不到任何包含lenght一词的内容!:/我不明白为什么如果我把fetch改成一个简单的数组,它就可以正常工作!!!GRRRRR:(您可以添加一个异常断点来检查它实际崩溃的位置吗?