朋友您好我正在使用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中的数组是空的..我不明白我在哪里做错了...
所以朋友们,我尽力让你们都明白我的问题...
所以请帮帮我。
答案 0 :(得分:0)
你在哪里尝试在SecondTableViewController中获取savedArray的元素? 如果你试图在-init方法中获取它们,那么当时数组将是nil。 pushViewController:animated:方法将调用-viewDidLoad方法,你应该看到结果。 ps:我建议你不要在SecontTableViewController中保留savedArray,因为如果任何对象在运行时发生变化,它可能会导致代码崩溃。