【问题标题】:NSLog makes iPhone App crash during Apple App ReviewNSLog 在 Apple App Review 期间使 iPhone App 崩溃
【发布时间】:2009-12-11 23:50:10
【问题描述】:

我向 iTunesConnect 提交了我的应用程序,Apple 将以下崩溃报告返回给我:

Thread 2 Crashed:
0   libobjc.A.dylib                 0x00003eb8 objc_msgSend + 16
1   Foundation                      0x0004c3aa _NSDescriptionWithLocaleFunc + 24
2   CoreFoundation                  0x0003d52e _CFStringAppendFormatAndArgumentsAux + 1390
3   CoreFoundation                  0x0003ceca _CFStringCreateWithFormatAndArgumentsAux + 66
4   CoreFoundation                  0x00073fd6 _CFLogvEx + 34
5   Foundation                      0x000661a4 NSLogv + 74
6   Foundation                      0x0006614a NSLog + 18
7   mobilescan                      0x00039014 -[BlaBlaBlaDao insertCategoryWithId:andName:] (BlaBlaBlaDao.m:110)

似乎当应用程序尝试打印日志时,它会使应用程序崩溃。 这很奇怪,因为在调试模式下,应用程序会停止 2 秒然后打印错误并继续工作...

从应用程序崩溃的 BlaBlaBlaDao.m 中的第 110 行,我有这些行:

NSLog(@"category, id:%@, name:%@", subcategory.id, subcategory.name);

    [subcategory addFreshfoodProductsObject:freshfoodProduct];

    NSError *error = nil;
    if (![managedObjectContext save:&error]) {
        [managedObjectContext rollback];
        NSLog(@"error: %@", error);
    }   

它来自一个苹果的例子......

每个人都知道为什么?

感谢您的帮助!

【问题讨论】:

  • 好吧,首先你不能有一个名为 id 的成员,因为它是objective-c 中类型的保留字。你应该先重命名它。
  • 哪个 NSLog 失败了?第一个还是第二个有错误?

标签: iphone crash nslog


【解决方案1】:

在您的格式字符串中,您需要两个对象。对于日志记录,调用对象的 -description 方法。尝试打印其中一个对象的描述时,您的应用程序似乎崩溃了。您的一个或两个属性可能不是对象,而是标量值。也有可能某个属性(如果它是一个对象)已在某个时间点被释放,而您正在向一个已释放的实例发送消息。

除了崩溃之外,不要在您提交到 App Store 的应用程序中使用 NSLog。它没有理由存在,它所做的只是将文本转储到运行您的应用程序的每台 iPhone 的控制台。如果我没记错的话,所有这些都记录在每台运行它的 iPhone 上。不仅如此,它还会不必要地减慢您的应用程序的速度。在提交应用程序之前删除这些调用,或者使用 #ifdef 将它们本地化为仅您的调试版本。

【讨论】:

    猜你喜欢
    • 2023-02-04
    • 2015-06-16
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多