在coreData中返回空数组

时间:2011-10-21 14:32:35

标签: ios

朋友您好我正在使用coreData,我是新的..我阅读了coredata的官方文档并尝试使用它...

所以我做了什么,我正在分步写作......

1.我首先创建了基于窗口的项目,并选择了coredata选项

2.我打开了xcdatamodeld并添加了一个名为“Employee”的实体和三个属性...... a)名称b)部门c)指定..

3.我创建了employee.h和employee.m

4.现在在我的FirstTableViewController.m中 我写了这段代码

 - (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:&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:&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并在控制台中显示输出,每次运行项目时数据都会被保存并且工作正常。

现在我创建了另一个名为SecondTableViewController的tableviewcontroller

这样在FirstTableViewController的didselectrow上我将显示填充了m_mutableFetchResults的secondTableViewController

以下是我的

- (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];

}

我用[savedArray count]填充secondTableViewController但是secondTableViewController中的数组是空的..我不明白我在哪里做错了...

所以朋友们,我尽力让你们都明白我的问题...

所以请帮帮我。

1 个答案:

答案 0 :(得分:0)

你在哪里尝试在SecondTableViewController中获取savedArray的元素? 如果你试图在-init方法中获取它们,那么当时数组将是nil。 pushViewController:animated:方法将调用-viewDidLoad方法,你应该看到结果。 ps:我建议你不要在SecontTableViewController中保留savedArray,因为如果任何对象在运行时发生变化,它可能会导致代码崩溃。