1

我有一个包含对象和键的 NSDictionary。键包含名称和编号。我想使用 insertObject: atIndex: 将这些对象插入到 NSMutableArray 中。对象是名称,数字是我想放置对象的索引。我现在知道 NSMutableArrays 能够在 index:6 处插入对象,如果没有 1-5 那么我该如何实现呢?任何建议都非常感谢!

示例字典 [dict objectForKey:@"array"]:

 preferences as whole (
        {
        Name = PowerDown;
        btnIndex = 3;
    },
        {
        Name = ClearCache;
        btnIndex = 5;
    },
        {
        Name = KillBGApps;
        btnIndex = 6;
    },
        {
        Name = InfoPanel;
        btnIndex = 2;
    },
        {
        Name = Lock;
        btnIndex = 4;
    },
        {
        Name = Reboot;
        btnIndex = 0;
    },
        {
        Name = Respring;
        btnIndex = 1;
    }
)

到目前为止我所拥有的,但是在将对象添加到数组边界之外时会崩溃

-(void)loadArray{

 self.buttons = [NSMutableArray array];


    NSMutableArray *tempArray = [[NSMutableArray alloc] init];
    tempArray = [buttonsPrefs objectForKey:@"buttonsToOrder"];


    for(NSDictionary * dict in tempArray)
    {
        if (dict) {

            NSString *btnName = [dict objectForKey:@"Name"];

            NSString *btnIndex = [dict objectForKey:@"btnIndex"];
            NSUInteger index = [btnIndex integerValue];

            NSLog(@"Name = %@",btnName);
            NSLog(@"at index %i",index);

            [self.buttons insertObject: btnName atIndex: index];
        }


    }

}

编辑:当用户移动单元格时,这些值会更改名称的“索引”

- (void) tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath 
*)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
NSUInteger fromIndex = [fromIndexPath row];
NSUInteger toIndex = [toIndexPath row];
if (fromIndex == toIndex)
    return;
NSMutableDictionary *selectedButton = [[[_buttons objectAtIndex:fromIndex] retain] 
autorelease];
[_buttons removeObjectAtIndex:fromIndex];
[_buttons insertObject:selectedButton atIndex:toIndex];


//[buttonsPrefs setObject:_buttons forKey:@"buttonsToOrder"];
//[buttonsPrefs writeToFile:[self getFilePath] atomically: YES];


}
4

2 回答 2

2

尝试根据 yourDict 计数用一些虚拟数据填充目标数组,如下所示:

for (int i=0, i<[yourDict count], ++i){
    [yourArray addObject:@"dummyData"];
}

当您需要 insertObject 时,请执行以下操作:

for(NSDictionary * dict in tempArray)
{
    if (dict) {

        NSString *btnName = [dict objectForKey:@"Name"];

        NSString *btnIndex = [dict objectForKey:@"btnIndex"];
        NSUInteger index = [btnIndex integerValue];

        [yourArray insertObject:btnName atIndex:index];
        [yourArray removeObjectAtIndex:index+1];
    }
}
于 2012-10-02T04:13:41.640 回答
0
NSMutableArray insertObject: atIndex:

根据苹果文档`

"注意 NSArray 对象不像 C 数组。也就是说,即使你在创建数组时指定了大小,指定的大小也被视为“提示”;数组的实际大小仍然为 0。这意味着您不能在大于数组当前计数的索引处插入对象。”

只能填充有效的数组值集。您可以做两件事。

  1. 排序并填充数组
  2. 用一些默认对象填充数组,如字符串(不能为 nil),然后替换它。如果您要填充数组中的所有值,则此选项有效,因为稍后使用时,您必须检查天气值是否正确或默认值价值在那个位置
于 2012-10-02T04:14:10.597 回答