我在从进入我的数据库中的问题的映射职位。
请记住我使用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后已经设置与“实体”字典。
首先,你已经忘了描述您的“问题”,只有您的方案。究竟是不是您预期的结果?
的存在或缺乏在核心数据实体的属性不会影响它的行为。
命名为“实体”,然而,让我感觉蜘蛛侠发麻。虽然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”方法防止了“已删除”的访问自动生成的“已删除”属性。
所以,问题不在于一点与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没有任何属性。