2014-10-01 51 views
0

我有一個Parse.com中的對象數組,我嘗試迭代並取出objectId。我的方法如下:通過循環將NSMutableDictionary添加到數組導致覆蓋以前的值

-(void)buildActivityDictionary{ 
    arrayOfArrays = [[NSMutableArray alloc] init]; 
    arrayForDicts = [[NSMutableArray alloc] init]; 
    activityDict = [[NSMutableDictionary alloc] init]; 
    for (PFObject *object in someArray){ 
     PFObject *fromUser = [object objectForKey:@"fromUser"]; 
     PFObject *toUser = [object objectForKey:@"toUser"]; 

     NSString *requestId = object.objectId; 
     NSString *fromUserId = fromUser.objectId; 
     NSString *toUserId = toUser.objectId; 

     [activityDict setObject:requestId forKey:@"requestId"]; 
     [activityDict setObject:fromUserId forKey:@"fromUserId"]; 
     [activityDict setObject:toUserId forKey:@"toUserId"]; 
     [arrayForDicts addObject:activityDict]; 
     [arrayOfArrays addObject:arrayForDicts]; 
    } 
    NSLog(@"\narrayFofArrays = %@", arrayOfArrays); 
} 

我該如何達到理想的效果?我試過用setValue來代替,但沒有骰子。此外,當我嘗試將每個陣列添加到一個新陣列[arrayOfarrays addObject:arrayForDicts]時,我得到相同的結果。這是我的日誌輸出。任何建議將不勝感激。

arrayForDicts = (
    { 
    fromUserId = lVlLN0ucKQ; 
    requestId = SSrFp9pV1Y; 
    toUserId = SG359LXCtA; 
}, 
    { 
    fromUserId = lVlLN0ucKQ; 
    requestId = SSrFp9pV1Y; 
    toUserId = SG359LXCtA; 
}, 
    { 
    fromUserId = lVlLN0ucKQ; 
    requestId = SSrFp9pV1Y; 
    toUserId = SG359LXCtA; 
}, 
    { 
    fromUserId = lVlLN0ucKQ; 
    requestId = SSrFp9pV1Y; 
    toUserId = SG359LXCtA; 
} 

編輯:

someArray = (
    "<Activity:PMZO9LJ3os:(null)> {\n ACL = \"<PFACL: 0x1579c520>\";\n activityType = request;\n fromUser = \"<PFUser:rJWrNWO15W>\";\n toUser = \"<PFUser:SG359LXCtA>\";\n}", 
    "<Activity:aV3zz4iVrE:(null)> {\n ACL = \"<PFACL: 0x157e6960>\";\n activityType = request;\n fromUser = \"<PFUser:SG359LXCtA>\";\n toUser = \"<PFUser:SG359LXCtA>\";\n}", 
    "<Activity:K7504CAYnl:(null)> {\n ACL = \"<PFACL: 0x157e7810>\";\n activityType = request;\n fromUser = \"<PFUser:xMbXLMIv99>\";\n toUser = \"<PFUser:SG359LXCtA>\";\n}", 
    "<Activity:SSrFp9pV1Y:(null)> {\n ACL = \"<PFACL: 0x157e72c0>\";\n activityType = request;\n fromUser = \"<PFUser:lVlLN0ucKQ>\";\n toUser = \"<PFUser:SG359LXCtA>\";\n}" 
) 
+0

NSLog someArray.What的輸出是什麼? – 2014-10-01 16:06:01

+0

嘿Nimisha。我已更新我的原始問題以顯示日誌。 – 2014-10-01 20:19:56

回答

1

我已修改了代碼:

-(void)buildActivityDictionary{ 

arrayOfArrays = [[NSMutableArray alloc] init]; 
arrayForDicts = [[NSMutableArray alloc] init]; 

for (PFObject *object in someArray){ 

    NSMutableDictionary *activityDict = [[NSMutableDictionary alloc] init]; 
    PFObject *fromUser = [object objectForKey:@"fromUser"]; 
    PFObject *toUser = [object objectForKey:@"toUser"]; 

    NSString *requestId = object.objectId; 
    NSString *fromUserId = fromUser.objectId; 
    NSString *toUserId = toUser.objectId; 

    [activityDict setObject:requestId forKey:@"requestId"]; 
    [activityDict setObject:fromUserId forKey:@"fromUserId"]; 
    [activityDict setObject:toUserId forKey:@"toUserId"]; 
    [arrayForDicts addObject:activityDict]; 
    // [arrayOfArrays addObject:arrayForDicts]; 
    } 
    NSLog(@"arrayForDicts = %@", arrayForDicts); 
} 

創建循環內的字典。在你的代碼中,你可以在循環之外創建字典。每當迭代循環時它會覆蓋它的舊值。並且由於這個原因,字典數組只包含最後一個對象。

一件事,而不是這兩個語句

PFObject *fromUser = [object objectForKey:@"fromUser"]; 
    PFObject *toUser = [object objectForKey:@"toUser"]; 

,你也可以這樣寫:

PFUser *fromUser = [object objectForKey:@"fromUser"]; 
    PFUser *toUser = [object objectForKey:@"toUser"]; 

becase的 「FROMUSER」 和 「至用戶」 的類型是PFUser爲表示對您的someArray登錄。

+0

啊哈!男孩,我覺得很傻。非常感謝你爲我清理!昨晚我的夜晚幾乎毀了。並感謝PFUser指針,沒有雙關意圖。 – 2014-10-02 09:01:13

相關問題