iphone越狱开发与公共API
问题描述:
我有一个应用程序正在使用ABAdressBook
API & NSFileManager
。iphone越狱开发与公共API
当我从命令行运行应用程序 - 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);
}
}
}
}
}
编辑:我压住了问题到以下选择: [文件管理isReadableFileAtPath:nextItem] 当我运行从跳板上这个功能 - 它返回true - 几个文件...
当我在命令行中运行它时,它将所有文件返回false - 尽管我使用root权限运行该应用程序。
任何想法可以导致这种行为变化?
感谢, 伊泰
答
两个ABAddressBook
和NSFileManager
有一个返回一个独特的,共享的对象的类方法 - 在你的代码上面,在调用[NSFileManager defaultManager]
检索“默认NSFileManager
对象文件系统”,根据到文档。当您从命令行运行应用程序时,您可能不会执行共享对象初始化初始化的部分或全部代码;你甚至可能会从类方法中返回nil
。
如果是这样,你可以通过创建自己的对象来解决这个问题(即,通过使用[[NSFileManager alloc] init]
或[ABAddressBook addressBook]
),而不是依赖于类方法返回一个共享对象。
[ABAddressBook addressBook]会返回设备的地址簿吗?填写地址簿联系人?或者它将是一个空的? – 2011-12-24 12:38:02