Записать данные в.plist
Я знаю, что вопрос может выглядеть похожим на многие ранее заданные вопросы, но я не смог понять, что делать после прочтения всех этих вопросов и ответов.
Я хочу написать несколько слов, которые имеют wordNames
а также wordDefinitions
, и немного ID
и date ID
, У меня есть следующий код, но у меня есть два вопроса о словаре, использующем массив с разными типами данных, и способ определения ключей для словаря.
Пожалуйста, исправьте меня, если весь файл.plist, который я создаю, неверен.
Заранее спасибо.
- (IBAction)addWord:(id)sender
{
NSString *destinationPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
destinationPath = [destinationPath stringByAppendingPathComponent:@"Box.plist"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:destinationPath])
{
NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"Box" ofType:@"plist"];
[fileManager copyItemAtPath:sourcePath toPath:destinationPath error:nil];
}
// Load the Property List.
NSMutableArray* wordsInTheBox = [[NSMutableArray alloc] initWithContentsOfFile:destinationPath];
NSString *wordName = word.name;
NSString *wordDefinition = word.definition;
NSInteger deckID;
NSDate addedDate;
//is this correct to have an array of different types?
NSArray *values = [[NSArray alloc] initWithObjects:wordName, wordDefinition, deckID, addedDate, nil];
//How and where am I supposed to define these keys?
NSArray *keys = [[NSArray alloc] initWithObjects: NAME_KEY, DEFINITION_KEY, DECK_ID_KEY, DATE_KEY, nil];
NSDictionary *dict = [[NSDictionary alloc] initWithObjects:values forKeys:keys];
[wordsInTheBox addObject:dict];
[wordsInTheBox writeToFile:destinationPath atomically:YES];
}
1 ответ
initWithContentsOfFile:
всегда возвращает неизменный массив. Вы должны к этому:
NSMutableArray *wordsInTheBox = [[NSMutableArray alloc] initWithArray:[NSArray arrayWithContentsOfFile:destinationPath]];
То, что я не совсем понимаю, это где word
переменная определена. Это ивар?
Если вы используете последнюю версию XCode (4.4 или 4.5), я рекомендую использовать гораздо более простые литералы для создания словаря.
NSDictionary *dict = @{NAME_KEY : wordName,
DEFINITION_KEY : wordDefinition,
DECK_ID_KEY : deckID,
DATE_KEY : addedDate};
Но я не вижу проблем с вашим словарным определением. Он должен работать.
Вы должны убедиться, что где-то определены NAME_KEY, DEFINITION_KEY и т. Д. Все заглавные буквы обычно используются только для макросов препроцессора, поэтому вы можете сделать что-то вроде этого:
#define NAME_KEY @"Name"
#define DEFINITION_KEY @"Definition"
Вы также можете просто использовать строки прямо в своем словаре:
NSDictionary *dict = @{@"Name" : wordName,
@"Definition" : wordDefinition,
@"DeckID" : deckID,
@"Date" : addedDate};
Но использование макросов тоже неплохая идея.