2011-02-01 79 views
2

我已經有一個基於文檔的應用程序使用核心數據,並有一個tableView使用IB中的綁定和NSArrayController填充。一切工作正常,但我想確保第一列將立即在編輯模式下添加一個新的對象到數組。 我四處尋找合適的代碼並修改了一些Hillegass書。編輯工作正常,但行選擇似乎沒有工作。它停留在第0行,並且在編輯要編輯的下一列之後的Tab鍵位於該行上。這是我用過的代碼的一個版本。我已經搜索了我的問題的解決方案,但不斷收到沒有核心數據或綁定或非文檔應用程序的結果。 我在這裏錯過了什麼嗎?開始編輯插入

-(IBAction)addEmployee:(id)sender { 

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

//Fetch the update Employees 
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 

NSEntityDescription *employeeEntity = [NSEntityDescription entityForName:@"Employee" inManagedObjectContext:[self managedObjectContext]]; 
[fetchRequest setEntity:employeeEntity]; 

NSArray *fetchResults = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error]; 
[fetchRequest release]; 

NSError *error = nil; 

if (fetchResults == nil) { 
    // Something here to handle the error. 
    NSLog(@"The fetch results is null"); 
} 

int row = [fetchResults indexOfObjectIdenticalTo:newEmployee]; 


NSLog(@"row is %d",row); 

[[tableView window] endEditingFor:nil]; 

[tableView editColumn:1 row:row withEvent:nil select:YES]; 

}

這裏是固定的(並且大大simpified)版本

-(IBAction)addEmployee:(id)sender { 

Employee *newEmployee = [newEmployeeController newObject]; 
[newEmployeeController addObject:newEmployee]; 

[newEmployeeController rearrangeObjects]; 

NSArray *fetchResults = [newEmployeeController arrangedObjects]; 

int row = [fetchResults indexOfObjectIdenticalTo:newEmployee]; 

[[tableView window] endEditingFor:nil]; 

[tableView editColumn:1 row:row withEvent:nil select:YES]; 

    [newEmployee release]; 

}

+0

排序。現在我回過頭來,嚴肅地想知道我在想什麼...... – BillySangster 2011-02-01 22:24:57

+0

關於你的固定版本:你過早釋放newEmployee,然後在調用`indexOfObjectIdenticalTo:`時使用它。使用autorelease,或者稍後再發布。 – 2011-09-08 18:16:35

回答

1

首先,你不需要把對象的插入。 -insertNewObjectForEntityForName: inManagedObjectContext:返回id所以演員陣容減少。

您不需要爲獲取數組而獲取對象。您可以在NSArrayController中查詢您添加的新對象(如果不存在),請添加它(對不起,因爲我使用了NSArrayController,並且不記得它是否需要運行循環的一個循環來檢測更改)。

從那裏你可以要求NSArrayController索引,並繼續前進。