1

NSDictionaries を含む NSMutableArray の並べ替えに関するいくつかの投稿を見回して見ましたが、NSDictionaries で構成される NSMutableArray を実際に作成する方法の具体的な例を見つけることができませんでした。

NSUserDefaults を使用して、いくつかの異なる項目に対するユーザーの設定を追跡しています。NSMutableArray は合計項目を追跡するために使用され、NSDictionaries は各項目に関する個々の設定用です。

これらのメソッドを作成して設定クラスの項目を追跡しましたが、NMutableArray を初期化して NSDictionaries を含める方法がよくわかりません。

-(NSMutableArray *)deviceListArray
{
    return [[NSUserDefaults standardUserDefaults] mutableArrayValueForKey:@"device_list_array"];
}

-(void) setDeviceListArray:(NSMutableArray *)deviceListArray
{
    [[NSUserDefaults standardUserDefaults] setObject:deviceListArray forKey:@"device_list_array"];
}

誰かが私を正しい方向に向けることができれば、本当に感謝しています. どうもありがとうございました!または、それぞれの好みが異なるアイテムを追跡するためのより良い戦略を誰かが持っている場合、それも素晴らしいでしょう!

ありがとう!!

4

2 に答える 2

4

オブジェクトを userDefaults に渡すと、そのオブジェクトがそのオブジェクトを所有するため、その中の辞書のプロパティを変更することはできません。

できることは、変更可能な辞書を含むローカルの変更可能な配列がある 2 パス コピーです。同じサイズの新しい可変配列を作成し、可変辞書ごとに [NSDictionary dictionaryWithDictionary:] を呼び出して、新しい非可変辞書を新しい配列に追加します。

可変オブジェクトが辞書に埋もれている場合は、それについても同じことを行う必要があります。

そうは言っても、これほど膨大な量のものがある場合は、デフォルト システムの使用方法を適切に考えていないのではないかと思います。ほとんどの場合、文字列、数字、色などを保存するだけです.

編集:コード

NSMutableArray *array = [NSMutableArray arrayWithCapacity:10];

for(int i=0; i<10; ++i) {
  NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:10];
  // add stuff to the dictionary
  [array addObject:dict];
}

// later on want to change second dictionary:
NSMutableDictionary *dict = [array objectAtIndex:1];
// fool around with dict
// no need to re-save it in array, since its mutable
于 2012-07-30T23:45:33.620 に答える
1

これがあなたが探していたものかどうかわからない:

    #define kDeviceKey1 @"DeviceKey1"
    #define kDeviceKey2 @"DeviceKey2"
    #define kDeviceKey3 @"DeviceKey3"
    #define kDeviceKey4 @"DeviceKey4"
    #define kDeviceID @"DeviceID"

    NSMutableArray *devices = [[NSMutableArray alloc]init];
    NSMutableDictionary *deviceInfo = [[NSMutableDictionary alloc]init];
    // create a dictionary record for earch device which contains thing...
    // probably employ some kind of loop
    deviceInfo = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                       [NSNumber numberWithInt:1], kDeviceID, 
//                                        @"DeviceName1", kDeviceID,   // or this
                                       @"whateverthing1forDevice1", kDeviceKey1,
                                       @"whateverthing2forDevice1", kDeviceKey2,
                                       @"whateverthing3forDevice1", kDeviceKey3,
                                       @"whateverthing4forDevice1", kDeviceKey4,
                                       nil];

    [devices addObject:deviceInfo];
    // this is just an example, you would have some kind of loop to replace "whateverthing1forDevice1" with actual data
    deviceInfo = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                  [NSNumber numberWithInt:2], kDeviceID,
//                                        @"DeviceName2", kDeviceID,   // or this
                  @"whateverthing1forDevice2", kDeviceKey1,
                  @"whateverthing2forDevice2", kDeviceKey2,
                  @"whateverthing3forDevice2", kDeviceKey3,
                  @"whateverthing4forDevice2", kDeviceKey4,
                  nil];

    [devices addObject:deviceInfo];

    NSLog(@"devices: %@", devices);
于 2012-07-31T17:11:14.603 に答える