Ric*_*kiG 14 cocoa-touch objective-c nsdictionary nsobject
我从Web服务解析一些JSON,这给了我一个NSDictionary,我使用这个字典来填充NSObject类型的valueEntity上的属性
[myObject setValuesForKeysWithDictionary:JSONDict];
Run Code Online (Sandbox Code Playgroud)
(myObject与JSON解析器中的字典具有相同的属性名称和类型)
name = name
count = count
startDate = startDate
etc..
Run Code Online (Sandbox Code Playgroud)
有没有办法走另一条路,我有一个NSDictionary,我希望"填充"来自我的NSObject子类的属性和它们的值.就像我在标题中建议的那样:
单程
MyObject *myObject = [[MyObject alloc] init];
[myObject setValuesForKeysWithDictionary:JSONDict];
Run Code Online (Sandbox Code Playgroud)
另一种方式
NSMutableDictionary *dict = [myObject makeDictionaryWithObjectProperties];
Run Code Online (Sandbox Code Playgroud)
这样做的原因是我有一个valueEntity,根据协议,我的视图都符合,但我也希望用值来填充NSManagedObject.所以我认为使用NSDictionary作为中间步骤我可以在我的NSManagedObject上做一个类别,它从我的对象子类NSObject上的值手动设置每个属性.
用字典我可以去:
[myManagedObject setValuesForKeysWithDictionary:dict];
Run Code Online (Sandbox Code Playgroud)
一旦我完成上述操作,我就无法将字典表示恢复出去了吗?
jle*_*ehr 17
是的,方法是:
- (NSDictionary *)dictionaryWithValuesForKeys:(NSArray *)keys
Run Code Online (Sandbox Code Playgroud)
传入表示您感兴趣的对象属性的键数组,并返回包含属性值的字典.
该NSKeyValueCoding协议定义了许多强大且非常有用的方法; 熟悉它是件好事.
还有一个非常有价值的伴侣指南:
你真的想要获得所有的房产吗?通常将对象的所有属性都作为字典获取是没有意义的.例如,如果一个NSManagedObject包含关系,你想在字典中得到它吗?如果是这样,你想如何表现它?
正如jlehr所说,最好明确地使用一组密钥dictionaryWithValuesForKeys:.
也就是说,使用可怕的Objective-C运行时,您确实可以实现makeDictionaryWithObjectProperties.使用class_getPropertyList和property_getName.我不会详细说明如何做到这一点,因为如果你遵循这种方法,你就会知道你在做什么.
顺便说一句,这是非常危险的为你分配一个JSON从互联网上返回一个对象来NSManagedObject使用setValuesForKeysWithDictionary:.因为,如果JSON对象恰好包含您不期望的其他键,则您的代码可能会突然崩溃.所以,不要这样做.
另一条评论:你的伪代码
NSObject *myObject = [[NSObject alloc] init];
[myObject setValuesForKeysWithDictionary:JSONDict];
Run Code Online (Sandbox Code Playgroud)
没有多大意义:是的,你可以打电话setValuesForKeysWithDictionary:反对NSObject,但它会失败,因为你不能setValue:forKey:参加JSONDict香草的任何参赛作品NSObject.我想你知道这一点,但我想明确说明,以便遇到这个页面的新手不会被愚弄.
| 归档时间: |
|
| 查看次数: |
5536 次 |
| 最近记录: |