我有一个使用ABAdressBook
API& NSFileManager
。
当我从命令行运行应用程序时 - 似乎没有检索到API
AddressBook/NSFileManager
信息 - 但是当我从跳板运行它时 - 它确实向我显示了所需的信息。
是不是因为我的应用程序在从命令行运行时没有UI?
int main(int argc, char *argv[])
{
@autoreleasepool
{
printf("HELLO TEST\n");
NSLog(@"---------");
NSMutableArray* dbList = [[NSMutableArray alloc] init];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSLog(@"file manager address is %@",fileManager);
NSDirectoryEnumerator *dirnum = [fileManager enumeratorAtPath: @"/private/"];
NSLog(@"dirNum is %@",dirnum);
NSString *nextItem = [NSString string];
while( (nextItem = [dirnum nextObject])) {
if ([[nextItem pathExtension] isEqualToString: @"db"] ||
[[nextItem pathExtension] isEqualToString: @"sqlitedb"]) {
if ([fileManager isReadableFileAtPath:nextItem]) {
[dbList addObject:nextItem];
NSLog(@"%@", nextItem);
}
}
}
}
}
修改:我将问题固定到以下选择器: [fileManager isReadableFileAtPath:nextItem] 当我从SpringBoard运行此函数时 - 它返回true - 对于几个文件......
当我在命令行中运行它时 - 它会向所有文件返回false - 尽管我正在以root权限运行应用程序。
知道什么会导致这种行为改变?
谢谢, 伊泰
答案 0 :(得分:1)
ABAddressBook
和NSFileManager
都有一个返回唯一共享对象的类方法 - 在上面的代码中,对[NSFileManager defaultManager]
的调用会检索“默认的NSFileManager
对象对于文件系统“,根据文档。当您从命令行运行应用程序时,您可能没有执行初始化共享对象的部分或全部代码;你甚至可以从课堂方法中找回nil
。
如果是这样,您可以通过创建自己的对象(即使用[[NSFileManager alloc] init]
或[ABAddressBook addressBook]
)而不是依靠类方法返回共享对象来解决此问题