[ios]数据写入.plist

发布时间: 2017/3/27 19:45:45
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我知道这个问题可能看起来类似于许多以前问的问题,但未能理解阅读所有这些问题和答案后要做什么。

我想要写大量的单词,有 wordNameswordDefinitions ,和一些 IDdate 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};

但使用宏也不是一个糟糕的主意。

赞助商