无法将 NSDictionary 参数写入自定义对象
Posted
技术标签:
【中文标题】无法将 NSDictionary 参数写入自定义对象【英文标题】:Can't write NSDictionary parameters into custom Object 【发布时间】:2016-03-09 11:35:39 【问题描述】:我一直坚持将 NSDictionary 写入 Object 进程,我相信这个问题很简单,但如果能得到帮助会很棒。这是我的代码:
我的自定义对象:
@interface User : NSObject
@property (nonatomic, retain) NSString *cId;
@property (nonatomic, retain) NSString *firstName;
@property (nonatomic, retain) NSString *lastName;
....
-(instancetype) initWithParameters:(NSDictionary*) parameters;
@end
#import "User.h"
@implementation User
-(instancetype) initWithParameters:(NSDictionary*) parameters
self = [super init];
if (self)
[self setParameters:parameters];
return self;
- (void) setParameters:(NSDictionary*) parameters
_cId = parameters[@"cId"];
_firstName = parameters[@"first_name"];
_lastName = parameters[@"last_name"];
....
及写作过程:
id userObjects = [resultData objectForKey:@"data"];
NSMutableArray* mUsers = [[NSMutableArray alloc] init];
for (NSDictionary* userParameters in userObjects)
User *user = [[User alloc] initWithParameters:userParameters];
[mUsers addObject:user];
userObjects - NSArray 从服务器数据的 JSON 对象中获取。
问题是:初始化后什么都没有发生,用户对象仍然为空,然后我尝试了 - setValuesForKeysWithDictionary 在我调用与字典中的键相同的变量并且没有任何改变之后。
添加 mUsers 后:
谁能告诉我我做错了什么?谢谢!
【问题讨论】:
你调试过initWithParameters吗?是否在这种情况下 if (self)user
只是一个局部变量,mUsers
是什么?我会避免声明以set
开头的方法,因为它可以被视为属性设置器。
@Kiran 是的,调试器只是一步一步地移动,没有警告或日志,一切顺利,但变量仍然为空。
正如 vadian 所说.. 用户是局部变量。您尝试记录 mUsers。
@vadian 函数名在这种情况下并不重要,因为我已经尝试在 init 函数中正确地完成这项工作。 mUsers 就是你可以在上面看到的 NSMutableArray
【参考方案1】:
我相信您认为这些对象未初始化,因为您在每个 User
对象旁边看到了 0 key/value pairs
。
您的代码看起来不错,我认为一旦您像这样实现[NSObject description]
(或[NSObject debugDescription]
),情况就会发生变化:
- (NSString *)description
return [NSString stringWithFormat:@"cId=%@, firstName=%@, lastName=%@",
_cId, _firstName, _lastName];
【讨论】:
你是对的,我使用了日志并且有所有需要的信息,奇怪的是我依赖调试器,我的错 :) 谢谢!以上是关于无法将 NSDictionary 参数写入自定义对象的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 RKMappingOperation 将本地 NSDictionary 映射到自定义对象?
将 NSDictionary 解析为带有自定义分隔符的字符串