3

我希望编辑核心数据中的现有记录。目前,我有这段代码,但它创建了一条新记录(并将正确的数据插入到正确的列中):

NSManagedObjectContext *context = [[NSApp delegate] managedObjectContext];
NSManagedObject *instrument  = nil;



instrument = [NSEntityDescription insertNewObjectForEntityForName: @"Instrument"
                  inManagedObjectContext: context];

[instrument setValue:[NSNumber numberWithInt:quantityInStockInstruments] 
    forKey: @"quantity"];

结果将如下所示:

Instrument | Value | Quantity

Violin     | £25   | 9

           |       | 8 <<< This is the new record that is created, instead of setting the
                           quantity of violin from '9' to '8'

我希望程序编辑当前突出显示的行的数量列(在这种情况下是“小提琴”行。我该怎么做?

4

2 回答 2

4

正如 refulgentis 所说,线索在选择器的名称中。您正在添加一个新对象。

比使用表格更好的方法是使用selectedObjectsNSArrayController。举个例子(为了清楚起见,这是冗长的,我已经把它写在了我的脑海中):

// Get the selected objects from the NSArrayController.
// There may be more than one object selected, so this needs to be accounted for.
NSArray *selectedObjectsArray = [yourArrayController selectedObjects];

// Get the first object in the array, this is the one that will have it's values changed.
id firstSelectedObject = [selectedObjectsArray objectAtIndex:0];

// Change a value in a KVC compliant way
[firstSelectedObject setValue:newValue forKey:@"keyValueToChange"];

编辑在评论后添加

您是否有阵列控制器的插座并在 Interface Builder 中正确连接?

无论如何,代码对我有用。这是一个显示它工作的示例项目。

于 2009-11-06T00:13:44.547 回答
1

注意选择器名称:“插入对象:inContext”。

正如 amrox 所说,这取决于您的模型(即核心数据)和控制器的连接方式。如果不了解您的代码,我很难说,特别是因为我通常更多地在 iPhone 方面(没有绑定),但基本上你需要说 [[yourDataArray objectAtIndex:[table selectedRow ]] setValue:@"whatever" forKey:@"whatever"]

于 2009-11-05T23:06:15.337 回答