возврат пустого массива в CoreData

#ios

#iOS

Вопрос:

Здравствуйте, друзья, я работаю с CoreData, и я новичок в этом .. Я прочитал официальную документацию coredata и попытался поиграть с ней…

Итак, что я сделал, я пишу поэтапно..

1. Сначала я создал проект на базе windowbased с выбранным параметром coredata

2. Я открыл xcdatamodeld и добавил один объект с именем «Employee» и тремя атрибутами..а) имя б) Отдел в) Обозначение..

3. Я создал сотрудника.h и employee.m

4. Теперь в моем первом TableViewController.я написал этот код

  - (void)viewDidLoad
    {
        [super viewDidLoad];

        Employee *emp = (Employee *)[NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:managedObjectContext];

        Employee *emp1 = (Employee *)[NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:managedObjectContext];


        m_employeeArray = [[NSMutableArray alloc]init];

        [emp setName:@"Jack"];
        [emp setDept:@"Accounts"];
        [emp setDesignation:@"Manager"];

        [emp1 setName:@"Joseph"];
        [emp1 setDept:@"Finance"];
        [emp1 setDesignation:@"Manager"];

        [m_employeeArray addObject:emp];
        [m_employeeArray addObject:emp1];


//Code to save the data..
        NSError *error = nil;
        if (![managedObjectContext save:amp;error]) {
            // Handle the error.
        }

        NSFetchRequest *request = [[NSFetchRequest alloc] init];
        NSEntityDescription *entity = [NSEntityDescription entityForName:@"Employee" inManagedObjectContext:managedObjectContext];
        [request setEntity:entity];


       m_mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:amp;error]mutableCopy];
        if (m_mutableFetchResults == nil) {
            // Handle the error.
        }


        for (Employee *info in m_mutableFetchResults)
        {
            NSLog(@"Name: %@", emp.Name);
            NSLog(@"Name: %@", emp.Dept);
            NSLog(@"Name: %@", emp.Designation);
        }

    }
  

и мои методы делегирования таблиц приведены ниже

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return [m_employeeArray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    // Configure the cell...
    Employee *emp = (Employee *)[m_employeeArray objectAtIndex:indexPath.row];

    cell.textLabel.text = emp.Name;


    return cell;
}
  

и поэтому, когда я загружаю представление, я получаю ячейку, заполненную двумя именами, то есть Джеком и Джозефом
Здесь вы можете видеть, что я сохраняю данные в m_mutableFetchResults и показываю вывод в консоли, и при каждом запуске проекта данные сохраняются и работают нормально..

Теперь я создал другой tableviewcontroller под названием SecondTableViewController

так что при выборе FirstTableViewController я покажу secondTableViewController, заполненный m_mutableFetchResults

итак, ниже мой

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Navigation logic may go here. Create and push another view controller.

     SecondTableViewController *detailViewController = [[SecondTableViewController alloc] initWithNibName:@"SecondTableViewController" bundle:nil];

    [detailViewController setSavedArray:m_mutableFetchResults];
     [self.navigationController pushViewController:detailViewController animated:YES];
     [detailViewController release];

}
  

и я заполняю secondTableViewController с помощью [savedArray count], но массив во secondTableViewController пуст..Я не понимаю, где я ошибаюсь…

Итак, друзья, я изо всех сил старался, чтобы вы все поняли мою проблему…

Поэтому, пожалуйста, помогите мне.

Ответ №1:

где вы пытаетесь получить элементы savedArray во SecondTableViewController? если вы попытаетесь получить их методом init, в то время массив будет равен нулю. метод pushViewController:animated: вызовет метод viewDidLoad, и вы должны увидеть результаты. ps: Я рекомендую вам не сохранять savedArray в SecontTableViewController, потому что это может привести к сбою вашего кода, если какие-либо объекты изменятся во время выполнения.

Комментарии:

1. Привет, спасибо за ваш ответ, в seconviewTableViewcontroller, в методе viewDidLoad, я сначала инициализировал savedarray, а затем использовал его в методах делегирования таблицы.

2. Привет, друзья, пожалуйста, помогите мне