0

苹果提供了崩溃日志,解释了遇到的异常和原因如下:

异常类型: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未设置(空或不存在的 plist 文件) ,您尝试注册一个deviceToken可能。尝试删除 Preferences 文件夹中的所有 plist,您可能会重现崩溃。NILdevTokenstandardUserDefaults

要解决问题,您应该检查 if deviceTokenis NIL。如果不是:registerDeviceToken,否则创建空令牌等。

于 2012-04-27T08:24:21.550 回答
0

我认为,这是一个明显的内存泄漏问题@** deviceToken**。同意@septi 的描述。

在明确提到的异常中,'NSInvalidArgumentException',原因:'-[__NSCFData dataUsingEncoding:]:发送了无法识别的选择器并且 deviceToken 可能正在存储空值,这会产生问题。

于 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 回答