解决[[NSFileManager defaultManager] contentsOfDirectoryAtPath 方法获取不到数据的bug

本文详细介绍了Xcode在引入工程时提供的三个选项:Copyitemsifneeded、Creategroups和Createfolderreferences的功能及应用场景,并通过实例说明如何正确配置这些选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在说这个问题之前,必须先解释一下,我们在引入工程的时候,xcode会给我们3个选项



1.Copy items if needed

主要是说明,是否要将文件拷贝到工程所在目录。

如果不选中,而且该库文件不在工程目录下,引入文件的时候就仅仅是引入逻辑链接,不拷贝文件。(如果库文件移动,则可能在编译工程的时候出错)

如果选中,则将该文件拷贝到工程目录下(系统推荐的方式),虽然引用的也是逻辑链接,但是不会因为引动库文件而引起错误


2.Create groups

把选择的文件添加到工程的group下,如果你选择的是文件,则把文件夹认为是group。他添加的文件夹对应的工程目录和文件路径不一定是一一对应的。你可以删除文件,可以把这个文件删除在工程外,也可以删除文件对应的本地文件。应该它生成的文件夹是黄色的。

例如:


3.Create folder references

这种方法是建立一个文件夹的索引,同时文件夹中的所有文件也会添加到整个工程。他添加的文件夹对应的工程目录和文件路径是一一对应的。你要删除其中的文件的话可以直接到文件目录下把文件删除,然后再刷新一下目录,文件就会被删除了。这样添加文件夹的方法很方便,你在做cocos2d的工程时应该会经常用到。应该他生成的文件夹是蓝色的。

例如:


通过Show in Finder 打开工程,右键两个文件夹可以看出


我使用 [[NSFileManager defaultManager] contentsOfDirectoryAtPath 本意是获取bundle中的资源,所以用Create folder references,就可以解决获取为nil的bug了

参考文章:http://blog.youkuaiyun.com/yu0089/article/details/16984985

http://www.cnblogs.com/taintain1984/p/3423773.html

http://www.cocoachina.com/bbs/simple/?t20533.html

http://www.4byte.cn/question/21930/unable-to-copy-folder-from-application-bundle-to-document-directory.html

在Objective-C中,写入CSV数据而不覆盖已有文件通常涉及到读取原始文件、追加新数据,而不是直接替换整个文件。以下是一个简单的步骤: 1. **打开文件**:首先,你需要使用`NSFileHandle`或`NSString`的`stringWithContentsOfFile:`方法打开CSV文件,如果文件不存在则创建它。 ```objective-c NSString *filePath = @"your_file_path.csv"; NSMutableString *content; if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { // 文件存在,读取并拼接内容 content = [NSMutableString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil]; } else { // 如果文件不存在,初始化一个新的字符串 content = [@"your_initial_data" mutableCopy]; // 这里可以是初始的CSV行,或者空字符串 } ``` 2. **追加数据**:假设你已经有了新的数据作为字典或数组,你可以将其转换成CSV格式然后添加到`content`字符串中。例如,如果你的数据是字典,可以使用`NSJSONSerialization`将字典序列化为CSV格式。 ```objective-c NSArray<NSDictionary *> *newData = ...; // 新的数据集合 NSString *newLine = [self dictToCSVString:newData]; [content appendString:newLine]; ``` 这里`dictToCSVString:`是你自定义的一个方法,用于将字典数组转换为CSV格式。 3. **保存文件**:最后,使用`writeToFile:atomically:`方法将更新后的`content`写回到文件中。 ```objective-c BOOL success = [content writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil]; if (success) { NSLog(@"数据成功追加到CSV文件"); } else { NSLog(@"写入CSV文件失败"); } ``` 注意:这个例子假设你有一个方法`dictToCSVString:`能够将字典列表转化为CSV行。实际实现可能需要根据你的具体需求来编写。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值