1

一个非常简单的问题,我找不到答案。我有我的核心数据实体子类 -Area并且GPS我正在使用来自 JSON 文件的数据设置它们。这似乎很好。但是如何设置两个新创建的实体对象之间的关系呢?

    NSManagedObjectContext *context = [self managedObjectContext];
    Area *area = [NSEntityDescription
                                  insertNewObjectForEntityForName:@"Area"
                                  inManagedObjectContext:context];

    GPS *gps = [NSEntityDescription
                                 insertNewObjectForEntityForName:@"GPS"
                                 inManagedObjectContext:context];

    NSDictionary *attributes = [[area entity] attributesByName];

    for (NSString *attribute in attributes) {
        for (NSDictionary * tempDict in jsonDict) {  
            id value = [tempDict objectForKey:attribute];

            if ([value isEqual:[NSNull null]]) {
                continue;
            }

            if ([attribute isEqualToString:@"latitude"] || [attribute isEqualToString:@"longtitude"]) {
                [gps setValue:value forKey:attribute];
            }
            else {
                [area setValue:value forKey:attribute];
            }
        }

        [area setAreaGPS:gps]; // Set up the relationship
        }

Area到的关系名称GPSareaGPS

错误:

 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unacceptable type of value for to-many relationship: property = "areaGPS"; desired type = NSSet; given type = GPS; value = <GPS: 0x369540>

我已经[area setAreaGPS:gps];在几个示例中看到了这种语法,但显然我不明白如何正确使用它。

4

1 回答 1

3

您已将关系设置为一对多关系。根据您定义区域的方式,这可能是也可能不是一个好的选择。如果一个区域可以有多个与之关联的 GPS 对象,那么你很好。那么你需要改变的只是你[area setAreaGPS:gps]

NSMutableSet *mutableGPS = [area.areaGPS mutableCopy];
[mutableGPS addObject:gps];
[area setAreaGPS:mutableGPS];

如果您只希望一个 GPS 对象与一个 Area 对象相关联,则必须将关系更改为不是一对多关系,而是一对一关系。在这种情况下,您不需要更改任何代码(重新生成NSManagedObject子类除外)。

于 2013-01-13T23:25:55.560 回答