オブジェクトとキーを含む NSDictionary があります。キーは名前と番号を保持します。insertObject: atIndex: を使用して、これらのオブジェクトを NSMutableArray に挿入したいと思います。オブジェクトは名前で、番号はオブジェクトを配置したいインデックスです。1-5 がない場合、NSMutableArrays は index:6 にオブジェクトを挿入できることがわかりました。これを可能にするにはどうすればよいですか? どんな提案でも大歓迎です!
辞書の例 [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];
}