0

Я пытаюсь извлечь записи из Core Data. Я могу это сделать, минус тот факт, что я всегда получаю ошибку ниже при попытке поместить запрошенные элементы в UITableView. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация. Я думаю, проблема заключается в том, что я не использую надлежащий тип структуры данных для заполнения фида.Простой запрос данных ядра iOS

Ошибка:

<NSManagedObject: 0x7ff4cb712f10> (entity: Item; id: 0xd000000000040000 <x-coredata://B5B03BED-0A3E-45EA-BC52-92FB77BE0D51/Item/p1> ; data: <fault>) 
2015-04-05 20:29:17.080 TacticalBox[99411:6444447] -[__NSArrayI isEqualToString:]: unrecognized selector sent to instance 0x7ff4cb71a760 
2015-04-05 20:29:17.114 TacticalBox[99411:6444447] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI isEqualToString:]: unrecognized selector sent to instance 0x7ff4cb71a760' 

Код:

@property (strong, nonatomic) NSArray *items; 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 

    NSManagedObjectContext *context = [appDelegate managedObjectContext]; 

    // Do any additional setup after loading the view. 

    NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Item" inManagedObjectContext:context]; 

    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    [request setEntity:entityDescription]; 

    NSError *error; 

    items = [context executeFetchRequest:request error:&error]; 

    for(id obj in items) 
    { 
     NSLog(@"%@",obj); 
    } 

    // Uncomment the following line to preserve selection between presentations. 
    // self.clearsSelectionOnViewWillAppear = NO; 

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller. 
    // self.navigationItem.rightBarButtonItem = self.editButtonItem; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 

    // Configure the cell... 
    cell.textLabel.text = [items valueForKey:@"item_name"]; 

    return cell; 
} 

ответ

0

Ваш FetchRequest возвращает вам массив «Пункт» объектов, которые хранятся в каждом индексе вашей коллекции.

Хотя доступ к этим объектам вы должны сначала извлечь элемент из соответствующего индекса, такие как

Item* anItem = [items objectAtIndex:indexPath.row]; 

с последующим

cell.textLabel.text = [anItem valueForKey:@"item_name"]; 

Где item_name объявлен собственностью на anItem объекта.

В качестве проверки безопасности вы можете также использовать -

id anItem = [items objectAtIndex:indexPath.row]; 
if ([anItem isKIndOfClass:[Item class]]) { 
    cell.textLabel.text = [(Item*)anItem valueForKey:@"item_name"]; 
} 

, но это совершенно излишним, как ваш FetchQuery явно указывает, что ваш items будет иметь объекты класса Item

0

valueForKey как вы написали, что будет возвращать массив всех item_name полей каждого объекта в деталях. Вот почему ваша ошибка: «[__NSArrayI isEqualToString:]».

То, что вы, вероятно, хотите сделать что-то вроде

Item *cellData = (Item *)items[indexPath.row]; 
cell.textLabel.text = cellData.item_name;