【问题标题】:Can't write NSDictionary parameters into custom Object无法将 NSDictionary 参数写入自定义对象
【发布时间】: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

标签: ios objective-c parsing object nsdictionary


【解决方案1】:

我相信您认为这些对象未初始化,因为您在每个 User 对象旁边看到了 0 key/value pairs

您的代码看起来不错,我认为一旦您像这样实现[NSObject description](或[NSObject debugDescription]),情况就会发生变化:

- (NSString *)description
{
    return [NSString stringWithFormat:@"cId=%@, firstName=%@, lastName=%@",
        _cId, _firstName, _lastName];
}

【讨论】:

  • 你是对的,我使用了日志并且有所有需要的信息,奇怪的是我依赖调试器,我的错 :) 谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-26
  • 2014-02-15
  • 1970-01-01
  • 2014-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多