2014-10-01 73 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

相关问题