2012-06-29 78 views
0

我保存用戶信息在關鍵「用戶名」的NSMutableDictionary,然後保存在另一個NSMutableDictionary與關鍵字「名稱」,然後將該字典保存在NSMutableArray中的字典。但問題是,只要我保存另一個用戶使用不同的用戶名,它會覆蓋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

我認爲你有兩個場合相同的密鑰保存,因此訪問相同的陣列,您需要更改爲不同的字典的關鍵。

編輯:

[userDictionary setObject:dataDictionary forKey:[NSString stringWithFormat:@"name%d,nameCount"]]; 
+0

然後請顯示正確的代碼。 – trojanfoe

+0

我用代碼更新了我的答案。 – Saleh

1

我想你應該寫:

[userDictionary setObject:dataDictionary forKey:username]; 

(其實我不明白爲什麼這樣做;

[[[ArraysManager sharedInstance] getTotalUserArray] addObject:userDictionary]; 

好像要添加每次都在同一個字典中。)

+0

我將userDictionary添加到NSmutableArray –

+0

是的,但不是你多次添加它,最終? – sergio

0
[dataDictionary removeAllObjects]; 
[userDictionary removeAllObjects]; 

我認爲上述兩個對象都是成員變量,並且您正在重用這些成員變量來向數組添加數據。從字典中刪除對象不會創建新的字典對象,但會在相同的內存位置進行更新。你的數組將會有多個字典和子字典,但是它們都有2個對象在同一個內存位置。

而不是這些成員變量,使用這些作爲局部變量。 在此方法中初始化它們並將它們添加到數組中。 稍後在此方法結束之前釋放它們。

希望它可以幫助

0

您與同NSMutableDictionary對象做addObject

您是否在addObject之後檢查count財產?

對於快速修復,只需將copy字典添加到數組中即可。

[[[[ArraysManager sharedInstance] getTotalUserArray] addObject:[[userDictionary copy] autorelease];

autorelease非ARC配置)