我正在使用Xcode开发iOS应用。在其中一个接口实现(比如接口A)中,我在文件目录下创建文件。我可以从接口A访问它。但是从另一个接口(说接口B),如果我尝试访问我在接口A中创建的文件,我找不到文件。我在接口B中用来访问文件内容的方法如下所示
- (void)loadData{
if ([[NSFileManager defaultManager] fileExistsAtPath:_appFile]) {
NSLog(@"Directory Exists");
_appFile = [_appFile stringByAppendingPathComponent:@"info.txt"];
if ([[NSFileManager defaultManager] fileExistsAtPath:_appFile]) {
NSLog(@"File Exists");
NSData *data = [[NSData alloc] initWithContentsOfFile:_appFile];
if (data!=nil) {
NSMutableDictionary *dict = (NSMutableDictionary *)
[NSKeyedUnarchiver unarchiveObjectWithData:data];
ToDoItem *item = [dict objectForKey:@"0"];
[_toDoItems addObject:item];
}
else{
NSLog(@"Data is empty");
}
}
else{
NSLog(@"File not exists");
}
}
else{
NSLog(@"Directory not exists");
}
}
我收到上述消息"目录不存在"。该目录与我从界面A引用的目录相同。但是无法从界面B访问。任何人都可以告诉我这是什么原因。
提前致谢
答案 0 :(得分:1)
遵循MVC模式。 编写一个类,它将执行所有相关文件,并将文件名传递给该类并获取文件。 (你的loadData方法将进入) 因为如果一个是从一个接口访问,它也必须从另一个接口访问。
答案 1 :(得分:0)
检查您的_appFile
可能是零。
我有这样的方法,你可以使用这样的东西通过在自定义的nsobject类中实现这种方法来移动到不同的类,并在每次需要时调用它。
- (BOOL)createWithName:(NSString *)fileName
{
// make some writing here..
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *SearchPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *FilePath = [SearchPath stringByAppendingPathComponent:fileName];
BOOL createStatus = [fileManager fileExistsAtPath:FilePath];
if (createStatus)
{
NSLog(@"Log: Created!");
}
else
{
NSLog(@"Log: Failed!");
}
return createStatus;
}
这个用于带路径的搜索文件..
- (BOOL)findFileWithName:(NSString *)fileName inDirectory:(NSString *)directoryPath
{
NSFileManager *fileManager = [NSFileManager defaultManager];
// for staticly assigned directory path
//
//NSString *searchPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
//
NSString *mergedPath = [directoryPath stringByAppendingPathComponent:fileName];
BOOL isAvailable = [fileManager fileExistsAtPath:mergedPath];
if (isAvailable)
{
NSLog(@"Log: File found");
}
else
{
NSLog(@"Log: No file found");
}
return isAvailable;
}