我正在使用键“username”在NSMutableDictionary中保存用户信息,然后将此Dictionary保存在另一个带有键“name”的NSMutableDictionary中,然后将Dictionary保存在NSMutableArray中。但问题是每当我用不同的用户名保存另一个用户时,它会覆盖NSMutableArray中的值。以下是我正在使用的代码
-(void) saveUserData:(NSString *)username
{ NSLog(@“\ nsaveDataBarButtonTapped \ n”);
NSLog(@"the count is %d",[[[ArraysManager sharedInstance] getTotalUserArray] count]);
NSLog(@"ArraysManager description is %@ ",[[[ArraysManager sharedInstance] getTotalUserArray] description]);
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *directory = [paths objectAtIndex:0];
NSString *userArrayFilePath = [[NSString alloc] initWithString:[directory stringByAppendingPathComponent:@"userData"]];
if (username.length != 0)
{
[dataDictionary setObject:[NSString stringWithFormat:@"%@",username] forKey:@"username"];
[dataDictionary setObject:[NSString stringWithFormat:@"%lf",totalValue] forKey:@"totalValue"];
[dataDictionary setObject:[NSString stringWithFormat:@"%lf",totalPayable] forKey:@"totalPayable"];
[userDictionary setObject:dataDictionary forKey:@"userDictionary"];
[[[ArraysManager sharedInstance] getTotalUserArray] addObject:userDictionary];
[[[ArraysManager sharedInstance] getTotalUserArray] writeToFile:userArrayFilePath atomically:NO];
[dataDictionary removeAllObjects];
[userDictionary removeAllObjects];
NSLog(@"ArraysManager description is %@ ",[[[ArraysManager sharedInstance] getTotalUserArray] description]);
}
else
{
UIAlertView *noNameAlertView = [[UIAlertView alloc] initWithTitle:@"No Name Found"
message:@"Please Enter the User Name"
delegate:self
cancelButtonTitle:@"Ok"
otherButtonTitles:nil, nil];
[noNameAlertView show];
[noNameAlertView release];
}
}
答案 0 :(得分:1)
我认为你应该写:
[userDictionary setObject:dataDictionary forKey:username];
(其实我不明白你为什么这样做;
[[[ArraysManager sharedInstance] getTotalUserArray] addObject:userDictionary];
好像你每次都要添加相同的字典。)
答案 1 :(得分:0)
我认为你在两种情况下使用相同的密钥保存,因此它访问同一个数组,你需要更改不同字典的密钥。
编辑:
[userDictionary setObject:dataDictionary forKey:[NSString stringWithFormat:@"name%d,nameCount"]];
答案 2 :(得分:0)
[dataDictionary removeAllObjects];
[userDictionary removeAllObjects];
我认为上述两个对象都是成员变量,并且您正在重用这些成员变量来向数组添加数据。从字典中删除对象不会创建新的字典对象,但会在相同的内存位置进行更新。你的数组将有多个词典和子词典,但所有这些都在同一个内存位置都有2个对象。
使用这些作为局部变量,而不是这些成员变量。 在此方法中初始化它们并将它们添加到数组中。 稍后在此方法结束前释放它们。
希望有所帮助
答案 3 :(得分:0)
您正在addObject
使用相同的NSMutableDictionary
对象。
您是否在count
之后检查了addObject
媒体资源?
为了快速修复,只需将copy
字典添加到数组中。
[[[ArraysManager sharedInstance] getTotalUserArray] addObject:[[userDictionary copy] autorelease];
(非{ARC配置autorelease
)