2011-12-15 7 views
1

私はABAdressBook API & NSFileManagerを使用しているアプリを持っています。iphone jailbrokenの公開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権限でアプリケーションを実行していますが。

何がこの動作の変更を引き起こす可能性がありますか?

おかげで、 イタイ

答えて

1

両方ABAddressBookNSFileManagerはユニークな、共有オブジェクトを返すクラスメソッドを持っている - 上記のコードでは、[NSFileManager defaultManager]の呼び出しは、「ファイルシステムのデフォルトNSFileManagerオブジェクト」を取得し、従っドキュメントにコマンドラインからアプリケーションを実行すると、が共有オブジェクトを初期化するコードの一部またはすべてを実行していない可能性があります。クラスメソッドからnilを返すことさえあるかもしれません。

この場合、クラスメソッドを使用して共有オブジェクトを返すのではなく、独自のオブジェクト(つまり、[[NSFileManager alloc] init]または[ABAddressBook addressBook]を使用して)を作成してこの問題を回避することができます。

+0

[ABAddressBook addressBook]はデバイスのアドレス帳を返しますか?アドレス帳の連絡先がいっぱいですか?それは空のものでしょうか? –

+0

私は[ABAddressBook addressBook]を呼び出すことができないようですが、コンパイラはこの機能を見つけられません。 –

+0

'[ABAddressBook addressBook]'はクラスメソッドです。これはクラス自体から呼び出すことを意味します。すなわち、あなたのコードは正確なリテラル文字列 '[ABAddressBook addressBook]'を使うべきです。 '[myInstanceVariable addressBook]'は動作しません。 '[ABAddressBook addressBook]'によって返されたアドレス帳が既存のレコードを検索するために使用できるかどうかについてのドキュメントは少し曖昧です。あなたがそのアドレス帳に書き込んで保存すると、その結果はユーザーのアドレス帳 –

関連する問題