【问题标题】:dropbox V2 DBFILESmetadata for loop not incrementating用于循环的 dropbox V2 DBFILESmetadata 不递增
【发布时间】:2025-11-28 20:40:01
【问题描述】:

我很难弄清楚如何合并一个计数器,所以“setObject”在这个 for..loop 中增加了它的“保存”。

   NSMutableArray *NewArray = [NSMutableArray new];
   NSMutableDictionary *dict = [NSMutableDictionary dictionary];


     for ( DBFILESMetadata *entry in result.entries) {

        [dict setObject:entry.pathDisplay forKey:@"pathDisplay"];

        [dict setObject:entry.name forKey:@"name"];

        [NewArray addObject:dict];

     }

我确定这是一个简单的答案,最后一行只是保存 result.entries 的最后一项。 NewArray 具有正确的项目数,但数组中的每个项目都是 result.entries 的最后一项:

2017-04-13 16:47:58.876 Sites[11145:688352] NewArray (
     {
     name = 229;
     pathDisplay = "/Sites/229";
     },
     {
     name = 229;
     pathDisplay = "/Sites/229";
    }
  ).

我需要添加某种类型的计数器来设置下一个对象,只是对它应该去哪里感到困惑。

提前致谢。

我想通了:

  for ( DBFILESMetadata *entry in result.entries) {

        [imagePaths addObject:entry.pathDisplay];
        [names addObject:entry.name];
     }

     for(int i=0; i<[result.entries count]; i++) {
         dict = @{@"name": names[i], @"pathDisplay": imagePaths[i]};
         [allObjects addObject:dict];
     }

【问题讨论】:

    标签: ios objective-c nsarray dropbox-api


    【解决方案1】:

    字典项键必须不同。否则,您总是会看到最后设置的项目。因为当保存相同的键时字典会覆盖。所以你可以像下面这样使用。

    1.解决方案

    NSMutableArray *NewArray = [NSMutableArray new];
    

    NSMutableDictionary *dict = [NSMutableDictionary 字典];

     int i = 0;
     for ( DBFILESMetadata *entry in result.entries) {
       
        [dict setObject:entry.pathDisplay forKey:[NSString stringWithFormat:@"pathDisplay%d",i]];
    
        [dict setObject:entry.name forKey:[NSString stringWithFormat:@"name%d",i]];
    
        [NewArray addObject:dict];
         i++;
    
     }
    

    2.解决方案

    创建一个包含 json 属性的类,如下所示。

    HoldJsonDataClass.h
        @interface HoldJsonDataClass : JsonData
        @property (nonatomic,retain) NSString *name;
        @property (nonatomic,retain) NSString * pathDisplay;
        @end
    
    HoldJsonDataClass.m    
        @implementation HoldJsonDataClass
        
        @end
    

    然后将类填充到数组中。这个解决方案更清晰。

        for ( DBFILESMetadata *entry in result.entries) {
    
        HoldJsonDataClass *holdJsonClass = [HoldJsonDataClass new];
        holdJsonClass.name = entry.name;
        holdJsonClass.pathDisplay = entry.pathDisplay;
        [NewArray addObject:holdJsonClass];
     }
    

    【讨论】: