Ios 在另一个NSMutableDictionary中设置NSMutableDictionary时出现问题
我需要获取用户提交的信息,将该信息存储在NSMutableDictionary中,然后将该NSMutableDictionary存储在另一个NSMutableDictionary中,然后将其编码到另一个类中。无论出于何种原因,我似乎无法将第一个NSMutableDictionary存储在另一个NSMutableDictionary中 由于工作规则,我不得不精简这里的代码,如果它似乎遗漏了什么,我很抱歉。我只发布了我遇到麻烦的部分 UserInfo.h:Ios 在另一个NSMutableDictionary中设置NSMutableDictionary时出现问题,ios,objective-c,nsmutabledictionary,Ios,Objective C,Nsmutabledictionary,我需要获取用户提交的信息,将该信息存储在NSMutableDictionary中,然后将该NSMutableDictionary存储在另一个NSMutableDictionary中,然后将其编码到另一个类中。无论出于何种原因,我似乎无法将第一个NSMutableDictionary存储在另一个NSMutableDictionary中 由于工作规则,我不得不精简这里的代码,如果它似乎遗漏了什么,我很抱歉。我只发布了我遇到麻烦的部分 UserInfo.h: #import <Foundatio
#import <Foundation/Foundation.h>
@interface MyPlanInfo : NSObject <NSCoding>
@property (nonatomic, strong) NSMutableDictionary *emergencyDictionary;
@end
在infoView.m中,addToDictionary方法中,userInfo是用户输入信息的数组,userKey是key的数组。emergencyContactInfo NSMutableDictionary工作正常,所有内容都在其中,但当我尝试将其设置为新NSMutableDictionary中的对象时,对于密钥,它不起作用。一切都是零
有人知道我做错了什么吗
编辑:如果你否决了投票,请留下一个原因,说明原因,这样我就可以避免将来做任何我做错的事情。在下面的一行中,你正在使用普通
alloc
/init
创建一个MyPlanInfo
的实例:
self.myPlanInfoObject = [[MyPlanInfo alloc] init];
- (id) init
{
if ((self = [super init])) {
emergencyDictionary = [[NSMutableDictionary alloc] init];
}
return self;
}
但是,至少在提供的代码中,您没有在MyPlanInfo
中重写init
,而是在initWithCoder:
中重写:
- (id) initWithCoder:(NSCoder *)coder
{
self = [super init];
self.emergencyDictionary = [coder decodeObjectForKey:emergencyDictionaryKey];
return self;
}
当您仅使用普通的init
时,myplannifo
的emergencyDictionary
实例变量将为nil
。您可能应该在MyPlanInfo
中添加如下内容以覆盖init
:
self.myPlanInfoObject = [[MyPlanInfo alloc] init];
- (id) init
{
if ((self = [super init])) {
emergencyDictionary = [[NSMutableDictionary alloc] init];
}
return self;
}
这将确保新创建的
myplannifo
实例有一个合适的NSMutableDictionary
,可以从其他类中进行操作。感谢您的回复。我试过了,但似乎不起作用。我能够以这种方式存储其他数据类型。例如,如果我想存储UITextField中的NSString,我可以键入self.myPlanInfoObject.name=textField.text代码>而且效果很好。接得好。我打赌就是这样。不过,我关于单步执行代码的建议仍然有效。
- (id) init
{
if ((self = [super init])) {
emergencyDictionary = [[NSMutableDictionary alloc] init];
}
return self;
}