Как мы можем сохранить в NSDictionary? В чем разница между NSDictionary и NSMutableDictionary?

@Jonathan Голландия

, Ничего себе, я думаю, что это - самая необработанная работа, которую я когда-либо видел помещенный в сообщение StackOverflow.Ай да молодец. Однако , вместо того, чтобы создать операторы DDL как строки, необходимо определенно использовать Объекты управления SQL Server классы, начатые с SQL 2005.

у David Hayden есть сообщение, наделенное правом , Составляют Таблицу в SQL Server 2005 Используя C# и Объекты управления SQL Server (SMO) - Генерация кода , который идет через, как составить таблицу с помощью SMO. Объекты со строгим контролем типов делают его бризом с методами как:

// Create new table, called TestTable
Table newTable = new Table(db, "TestTable");

и

// Create a PK Index for the table
Index index = new Index(newTable, "PK_TestTable");
index.IndexKeyType = IndexKeyType.DriPrimaryKey;

VanOrman при использовании SQL 2005 определенно делают часть SMO решения.

68
задан Atulkumar V. Jain 22 June 2012 в 09:30
поделиться

3 ответа

Документы NSDictionary и NSMutableDictionary , вероятно, будут вашим лучшим выбором. У них даже есть отличные примеры того, как делать разные вещи, например ...

... создать NSDictionary

NSArray *keys = [NSArray arrayWithObjects:@"key1", @"key2", nil];
NSArray *objects = [NSArray arrayWithObjects:@"value1", @"value2", nil];
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects 
                                                       forKeys:keys];

... перебрать его

for (id key in dictionary) {
    NSLog(@"key: %@, value: %@", key, [dictionary objectForKey:key]);
}

... сделать его изменяемым

NSMutableDictionary *mutableDict = [dictionary mutableCopy];

Примечание: исторический версия до 2010: [[dictionary mutableCopy] autorelease]

... и измените его

[mutableDict setObject:@"value3" forKey:@"key3"];

... затем сохраните его в файл

[mutableDict writeToFile:@"path/to/file" atomically:YES];

... и прочтите его снова

NSMutableDictionary *anotherDict = [NSMutableDictionary dictionaryWithContentsOfFile:@"path/to/file"];

... читать значение

NSString *x = [anotherDict objectForKey:@"key1"];

... проверить, существует ли ключ

if ( [anotherDict objectForKey:@"key999"] == nil ) NSLog(@"that key is not there");

... использовать страшный футуристический синтаксис

С 2014 года вы можете просто набирать dict [@ "key"] вместо [dict objectForKey: @ "key" ]

191
ответ дан 24 November 2019 в 13:59
поделиться

Ключевое отличие: NSMutableDictionary можно изменить на месте, NSDictionary - нет . Это верно для всех других классов NSMutable * в Какао. NSMutableDictionary - это подкласс NSDictionary, поэтому все, что вы можете делать с NSDictionary, вы можете делать с обоими. Однако NSMutableDictionary также добавляет дополнительные методы для изменения вещей на месте, такие как метод setObject: forKey: .

Вы можете конвертировать между двумя способами следующим образом:

NSMutableDictionary *mutable = [[dict mutableCopy] autorelease];
NSDictionary *dict = [[mutable copy] autorelease]; 

Предположительно вы хотите хранить данные записывая его в файл. У NSDictionary есть метод для этого (который также работает с NSMutableDictionary):

BOOL success = [dict writeToFile:@"/file/path" atomically:YES];

Для чтения словаря из файла существует соответствующий метод:

NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:@"/file/path"];

Если вы хотите прочитать файл как NSMutableDictionary, просто используйте:

NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithContentsOfFile:@"/file/path"];
]
18
ответ дан 24 November 2019 в 13:59
поделиться
NSDictionary   *dict = [NSDictionary dictionaryWithObject: @"String" forKey: @"Test"];
NSMutableDictionary *anotherDict = [NSMutableDictionary dictionary];

[anotherDict setObject: dict forKey: "sub-dictionary-key"];
[anotherDict setObject: @"Another String" forKey: @"another test"];

NSLog(@"Dictionary: %@, Mutable Dictionary: %@", dict, anotherDict);

// now we can save these to a file
NSString   *savePath = [@"~/Documents/Saved.data" stringByExpandingTildeInPath];
[anotherDict writeToFile: savePath atomically: YES];

//and restore them
NSMutableDictionary  *restored = [NSDictionary dictionaryWithContentsOfFile: savePath];
32
ответ дан 24 November 2019 в 13:59
поделиться