iphone越狱开发与公共API

问题描述:

我有一个应用程序正在使用ABAdressBook API & NSFileManageriphone越狱开发与公共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权限运行该应用程序。

任何想法可以导致这种行为变化?

感谢, 伊泰

两个ABAddressBookNSFileManager有一个返回一个独特的,共享的对象的类方法 - 在你的代码上面,在调用[NSFileManager defaultManager]检索“默认NSFileManager对象文件系统”,根据到文档。当您从命令行运行应用程序时,您可能不会执行共享对象初始化初始化的部分或全部代码;你甚至可能会从类方法中返回nil

如果是这样,你可以通过创建自己的对象来解决这个问题(即,通过使用[[NSFileManager alloc] init][ABAddressBook addressBook]),而不是依赖于类方法返回一个共享对象。

+0

[ABAddressBook addressBook]会返回设备的地址簿吗?填写地址簿联系人?或者它将是一个空的? – 2011-12-24 12:38:02