Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 从弹出按钮插入Cocoa核心数据项目关系_Macos_Cocoa_Core Data_Osx Snow Leopard - Fatal编程技术网

Macos 从弹出按钮插入Cocoa核心数据项目关系

Macos 从弹出按钮插入Cocoa核心数据项目关系,macos,cocoa,core-data,osx-snow-leopard,Macos,Cocoa,Core Data,Osx Snow Leopard,我有一个包含两个实体的核心数据:“CarEntity”和“PassengerEntity” 现在,每个实体都有一个名为“name”的属性。谨慎性与乘客性之间存在一种多对多的关系,称为“乘客”,而乘客性与乘客性之间存在一种反向关系“化身” 所以,我做了这个界面来插入一个新的乘客 我有一个NSTextField作为姓名,还有一个NSPoupButton用于选择汽车。 弹出按钮有一个“内容值”绑定到NSController阵列,允许我获取所有汽车 然后我有一个按钮来保存一切。标题代码如下所示: IBO

我有一个包含两个实体的核心数据:“CarEntity”和“PassengerEntity”

现在,每个实体都有一个名为“name”的属性。谨慎性与乘客性之间存在一种多对多的关系,称为“乘客”,而乘客性与乘客性之间存在一种反向关系“化身”

所以,我做了这个界面来插入一个新的乘客

我有一个NSTextField作为姓名,还有一个NSPoupButton用于选择汽车。 弹出按钮有一个“内容值”绑定到NSController阵列,允许我获取所有汽车

然后我有一个按钮来保存一切。标题代码如下所示:

IBOutlet NSTextField   *newPassengerNameField;
IBOutlet NSPopUpButton *newPersonCarField;
- (IBAction)saveNewPassenger:(id)sender {

    NSManagedObjectContext *managedObjectContext = [self managedObjectContext];

    NSManagedObject *newPassengerObject = [
        NSEntityDescription
            insertNewObjectForEntityForName:@"PassengerEntity"
                     inManagedObjectContext:managedObjectContext
    ];

    //Here we have all the fields to be inserted.
    [newPassengerObject setValue:[newPassengerNameField stringValue] forKey:@"name"];

    //Car ?????

}
实施过程如下:

IBOutlet NSTextField   *newPassengerNameField;
IBOutlet NSPopUpButton *newPersonCarField;
- (IBAction)saveNewPassenger:(id)sender {

    NSManagedObjectContext *managedObjectContext = [self managedObjectContext];

    NSManagedObject *newPassengerObject = [
        NSEntityDescription
            insertNewObjectForEntityForName:@"PassengerEntity"
                     inManagedObjectContext:managedObjectContext
    ];

    //Here we have all the fields to be inserted.
    [newPassengerObject setValue:[newPassengerNameField stringValue] forKey:@"name"];

    //Car ?????

}
好的,这个代码很好用。。为了名字。但我不知道如何插入车的关系

我的应用程序强制用户在进入此阶段之前创建一辆汽车,因此我在CarEntity中有对象

问题是:如何获取弹出按钮的值并将其发送给此插入代码


谢谢

这非常有效,但是非常感谢在清理代码方面的任何帮助

[newPassengerObject setValue:[newPassengerNameField stringValue] forKey:@"name"];

//Continuing from old code.

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"name = %@", [[newPersonCarField selectedItem] title]]; 

NSEntityDescription *modelEntity = [NSEntityDescription entityForName:@"CarEntity" inManagedObjectContext:managedObjectContext];

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

[fetchRequest setEntity:modelEntity];
[fetchRequest setPredicate:predicate];

NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:nil];

[fetchRequest release];

[newPassengerObject setValue:[results objectAtIndex:0] forKey:@"inCar"];
//Code goes on from here.

//代码清理注释

1:为什么使用“setValue:forKey”?您还没有自动生成实体类文件吗。如果已生成,则可以将实体视为自定义对象。例如,我正在学习你的代码。如果您有实体类文件,可以像下面这样修改它

NSManagedObjectContext *managedObjectContext = [self managedObjectContext];

PassengerEntity *newPassengerObject = [
    NSEntityDescription
        insertNewObjectForEntityForName:@"PassengerEntity"
                 inManagedObjectContext:managedObjectContext
];
newPassengerObject.name = [newPassengerNameField stringValue];
2:不要在您的saveNewPassenger:方法中混淆核心数据代码。它不适用于核心数据操作。在这种情况下,为什么要在该方法中编写核心数据代码?这只会导致代码重复。最好编写一个与核心数据通信的“接口类”。这将提高模块性和代码重用性