• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 将数据写入 .plist

[复制链接]
菜鸟教程小白 发表于 2022-12-13 16:19:32 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我知道这个问题可能看起来与许多以前提出的问题相似,但在阅读了所有这些问题和答案后,我无法理解该怎么做。

我想写一些具有 wordNameswordDefinitions 的单词,以及一些 IDdate ID。我有以下代码,但我有两个关于使用具有不同数据类型的数组的字典以及为字典定义键的方式的问题。

如果我制作的整个 .plist 文件有误,请纠正我。

提前致谢。

- (IBAction)addWordid)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];
}



Best Answer-推荐答案


initWithContentsOfFile:总是返回一个不可变数组。你应该这样做:

NSMutableArray *wordsInTheBox = [[NSMutableArray alloc] initWithArray:[NSArray arrayWithContentsOfFile:destinationPath]];

我不完全理解的是 word 变量的定义位置。是 ivar 吗?

如果您使用的是最新版本的 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};

但是使用宏也不是一个坏主意。

关于ios - 将数据写入 .plist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12446842/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap