我是Objective C编程的新手,所以请耐心等待。我在AppDelegate类中有NSMutableDictionary,我在很少的视图控制器中共享。在一个视图控制器中,我有一个方法,我将数据添加到NSMutableDictionary中,它似乎工作正常,直到我添加另一个对象...当我添加另一个对象时,它为所有键设置相同的对象。我的代码是这样的:
AppDelegate.h
@property (strong, nonatomic) NSMutableDictionary *myArray;
@synthesize myArray;
AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
myArray = [[NSMutableDictionary alloc]init];
return YES;
}
ViewController.m
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSMutableDictionary *myArrayFromAppDelegate = appDelegate.myArray;
// i'm using keys as strings so i need to convert int to string
NSString *key = [NSString stringWithFormat:@"%d", currentCuestion];
[myArrayFromAppDelegate setObject:_tempAnswers forKey:key];
[_tempAnswers removeAllObjects];
我已经使用NSLog检查了所有值,一切似乎都很好,但由于某种原因,它为所有键添加了相同的对象,但不是我们指定的对象。我哪里出错了?
答案 0 :(得分:1)
[myArrayFromAppDelegate setObject:_tempAnswers forKey:key];
将引用存储到myArrayFromAppDelegate
中的字典中。因此,如果你
稍后修改_tempAnswers
,字典中的所有引用都会受到影响。
为每个密钥创建单独的_tempAnswers
,或者存储副本:
[myArrayFromAppDelegate setObject:[_tempAnswers copy] forKey:key];