0

Apple は、以下のように発生した例外と理由を説明するクラッシュ ログを提供しました。

例外の種類: EXC_CRASH (SIGABRT) 例外コード: 0x00000000、0x00000000 クラッシュしたスレッド: 0 アプリケーション固有の情報: *キャッチされない例外 'NSInvalidArgumentException'、理由: '-[__NSCFData dataUsingEncoding:]: 認識されないセレクターがインスタンス 0x1b4c20 に送信されたため、アプリを終了しています'

クラッシュ ログをシンボリック化した後、クラッシュの理由として強調表示されたコード行を次に示します。

NSXMLParser *moveParser = [[NSXMLParser alloc] initWithData:[str_response dataUsingEncoding:NSUTF8StringEncoding]];

[[UAirship shared] registerDeviceToken:[deviceToken dataUsingEncoding:NSUTF8StringEncoding] withAlias:myAlias];

Apple は、iOS バージョン 5.1 を搭載した iPhone 4 および iPad 3G でこのアプリをレビューしましたが、毎回クラッシュが発生します。ただし、どのプラットフォームでもクラッシュを再現することはできません。iPhone4、iOS 5.1 の iPhone 3GS、iOS 5.0 の iPhone 3GS、iOS 4.3.2 の iPhone 3GS でデバッグを試みましたが、クラッシュは発生しませんでした。

私が使用しているコードの何が問題なのか、誰かに教えてもらえますか?

これらの行が記述されているコードのブロックを次に示します。

NSString *str_response=(NSString *)[dic objectForKey:SuccessKey];
NSXMLParser *moveParser = [[NSXMLParser alloc] initWithData:[str_response dataUsingEncoding:NSUTF8StringEncoding]];
moveParser.delegate = self;
[moveParser parse];
[moveParser release];

NSString *deviceToken=[[NSUserDefaults standardUserDefaults] objectForKey:@"devToken"];
[[UAirship shared] registerDeviceToken:[deviceToken dataUsingEncoding:NSUTF8StringEncoding] withAlias:myAlias];
4

3 に答える 3

0

plist(ユーザーデフォルトコンテナ)と関係がある可能性があります。inが設定されていない場合deviceToken(空または存在しない plist-file)を登録しようとしました。Preferences フォルダー内のすべての plists を削除してみてください。クラッシュが再現される可能性があります。NILdevTokenstandardUserDefaults

この問題を解決するには、 が かどうかを確認する必要deviceTokenがありNILます。そうでない場合: registerDeviceToken、そうでない場合は空のトークンなどを作成します。

于 2012-04-27T08:24:21.550 に答える
0

メモリ リーク @ ** deviceToken** の明らかな問題だと思います。@septi の説明に同意します。

「NSInvalidArgumentException」と明確に述べられている例外では、理由:「-[__NSCFData dataUsingEncoding:]: 認識されないセレクターが送信され、deviceToken が null 値を格納している可能性があり、それが問題を引き起こしています。

于 2012-04-27T08:28:39.397 に答える
0

str_response自動解放のために文字列がメモリにない可能性があります

NSString *str_response= ([dic objectForKey:SuccessKey] : [[NSString alloc] initWithFormat:@"%@",[dic objectForKey:SuccessKey]] autorelease]  ?  "" );

NSXMLParser *moveParser = [[NSXMLParser alloc] initWithData:[str_response dataUsingEncoding:NSUTF8StringEncoding]];

moveParser.delegate = self;

BOOL isParsed = [moveParser parse];

if (isParsed) {

}else {

    // Parsing fail

}

[moveParser release];
于 2012-04-27T08:30:14.637 に答える