映射和邮政实体核心数据使用神奇纪录

问题描述 投票:0回答:2

我在从进入我的数据库中的问题的映射职位。

请记住我使用MagicalRecord自动映射的JSON来我设置了NSManagedObjects。

该JSON可以在这里看到:http://web.archive.org/web/20170123035402/https://developers.app.net/reference/resources/post/,特别是与实体部分。

我的核心数据模型已经创建了以下关系:

Post <-> Entities <->> Links/Hashtags/Mentions

之间的关系是建立以适当的名称,以便MagicalRecord应该能够到树下来映射就好。 Post对象有一堆属性。其对实体关系对象被称为“实体”,这是它似乎因为主键的失败(据我所知,从它在MagicalRecord代码打破)。

由于这样的事实,实体基本上只是一个对象来保存每个实体类型的关系,我没有对实体对象的任何属性。不幸的是它似乎并没有帮助设定与实体对象一个随机名称的属性。

基于以上信息,你有没有什么会做出不同的关系和对象正确映射?是否确定有这个空实体对象,我只是使用的每个实体类型的关系,有点如何ADN后已经设置与“实体”字典。

ios json core-data magicalrecord
2个回答
0
投票

首先,你已经忘了描述您的“问题”,只有您的方案。究竟是不是您预期的结果?

的存在或缺乏在核心数据实体的属性不会影响它的行为。

命名为“实体”,然而,让我感觉蜘蛛侠发麻。虽然NSManagedObject没有一个(公共)“实体”属性或方法,它确实有一个“实体”的方法。

更新:我手动创建以下模型一个新的核心数据测试项目:

项目< - >实体< - >>富

与此代码:

NSManagedObjectContext *moc = [self managedObjectContext];
NSManagedObject *item = [NSEntityDescription insertNewObjectForEntityForName:@"Item"
                                                      inManagedObjectContext:moc];
NSManagedObject *ent = [NSEntityDescription insertNewObjectForEntityForName:@"Entities"
                                                     inManagedObjectContext:moc];
NSManagedObject *foo = [NSEntityDescription insertNewObjectForEntityForName:@"Foo"
                                                     inManagedObjectContext:moc];

[item setValue:ent forKey:@"entities"];
[foo setValue:ent forKey:@"entities"];

NSLog(@"%@ -> %@ -> %@", item, ent, foo);

它工作得很好。

更新:我可以找到导致怪异的行为最接近的事是这样的:

[item setValue:@(YES) forKey:@"deleted"];
[item setValue:@(YES) forKey:@"is_deleted"];

NSLog(@"deleted=%@", [[item valueForKey:@"deleted"] boolValue] ? @"YES" : @"NO");
NSLog(@"is_deleted=%@", [[item valueForKey:@"is_deleted"] boolValue] ? @"YES" : @"NO");

日志将打印“删除= NO”和“IS_DELETED = YES”,这是不对的前一种情况。预先存在的“请将isDeleted”方法防止了“已删除”的访问自动生成的“已删除”属性。


0
投票

所以,问题不在于一点与MagicalRecord和我自己,因为我已经成立了NSManagedObjects和关系的方式。

MagicalRecord使用主键来处理人际关系。如果一个尚未设置它使用的属性之一。在我来说,因为我只是用它来处理每个实体类型的关系Entities NSManagedObject没有任何属性。

该代码,这可以在NSObject+MagicalDataImport.m找到:

- (NSString *) MR_lookupKeyForRelationship:(NSRelationshipDescription *)relationshipInfo
{
    NSEntityDescription *destinationEntity = [relationshipInfo destinationEntity];
    if (destinationEntity == nil) 
    {
        MRLog(@"Unable to find entity for type '%@'", [self valueForKey:kMagicalRecordImportRelationshipTypeKey]);
        return nil;
    }

    NSString *primaryKeyName = [relationshipInfo MR_primaryKey];

    NSAttributeDescription *primaryKeyAttribute = [[destinationEntity attributesByName] valueForKey:primaryKeyName];
    NSString *lookupKey = [[primaryKeyAttribute userInfo] valueForKey:kMagicalRecordImportAttributeKeyMapKey] ?: [primaryKeyAttribute name];

    return lookupKey;
}

具体地说[[destinationEntity attributesByName] valueForKey:primaryKeyName];返回零。

起初,我曾与一个名为“测试”属性测试,但我不知道我做了什么,没有工作,也许没有做足够好的工作清除缓存。我再次试图清除的关系,所以我没有这些担心,然后我在实体上NSManagedObject增加了一个属性“实体”和它的所有工作太棒了!

抱歉。只是增加的情况下,任何人的回答和评论曾经遇到这个问题,他们正在使用MagicalRecord和NSManagedObject没有任何属性。

© www.soinside.com 2019 - 2024. All rights reserved.