2009-12-11 55 views
2

我提交我的應用程序iTunesConnect和蘋果給我回了下列崩潰報告:的NSLog使得蘋果應用程序審查過程中的iPhone應用程序崩潰

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); 
    } 

它來自蘋果的一個例子...

大家都知道爲什麼?

感謝您的幫助!

+0

那麼,首先你不能有一個名爲id的成員,因爲它是objective-c中的一個類型的保留字。你應該從重命名開始。 – 2009-12-11 23:56:18

+0

哪個NSLog失敗?第一或第二個錯誤? – epatel 2009-12-12 00:05:06

回答

8

在您的格式字符串中,您期待兩個對象。對於日誌記錄,調用對象的-description方法。看起來您的應用程序在嘗試打印其中一個對象的描述時崩潰了。這可能是你的一個或兩個屬性不是對象,而是標量值。也有可能其中一個屬性(如果它是一個對象)在某個時間點被釋放,並且您正在傳遞一個釋放的實例。

除了崩潰之外,請不要在提交給App Store的應用程序中使用NSLog。它沒有理由在那裏,它所做的就是將文本轉儲到運行應用程序的每個iPhone的控制檯。如果我沒有弄錯,所有這些都會記錄在每個iPhone上。不僅如此,它還會不必要地拖慢應用程序的運行速度。在提交應用程序之前,可以去掉這些調用,或者使用#ifdef將它們本地化爲只有您的調試版本。