簡體   English   中英

打印NSInteger時奇怪的BAD_ACCESS

[英]Strange BAD_ACCESS when printing NSInteger

這是我第一次在這里問問題,所以請不要對我太苛刻:-)。 我有一個奇怪的“訪問錯誤”問題。 在我的一類中,我有一個NSInteger以及其他一些成員。 我重寫了- (NSString *)description方法來打印所有類似的值(忽略了不相關的部分):

- (NSString *)description {
    return [NSString stringWithFormat:@"Duration:%d", duration];
}

然后我使用NSLog(@"%@", myObject)打印該文件NSLog(@"%@", myObject)這給了我EXC_BAD_ACCESS而沒有任何日志消息,而與NSZombieEnabled無關。

  • 我仔細檢查了所有格式說明符和參數的順序-是正確的。
  • 我嘗試將格式說明符更改為%i%@ ,但未得到任何結果
  • 當我初始化對象時,我不會初始化持續時間。 稍后,我通過屬性@property NSInteger duration分配它。 所以我嘗試在我的init方法中將持續時間初始化為0,但無濟於事。
  • 如果我在打印前將持續時間裝箱到NSNumber,則可以使用。
  • 當我刪除持續時間並保留所有其他ivars時,它將再次起作用。

我很困惑,我在這里做錯了什么? 你能幫助我嗎?

非常感謝!

編輯:總而言之,這似乎是由32位和64位平台之間的差異引起的,因為在iphone 4上運行時很好,並且僅在模擬器中運行時才有問題。 我嘗試了3種不同的方法-將%d%i與NSInteger變量本身一起使用,使用%qi%ld / %lx並且還嘗試使用各種格式說明符將其強制轉換為intlong 每次我都可以在設備上運行,但是要在模擬器中獲得EXC_BAD_ACCESS。

這里唯一的猜測:在您的情況下,NSInteger可能是64位,而%i(以及%d)期望使用32位整數,則可以嘗試%qi或(似乎更好的)強制轉換該值。

當您運行在調試器中的應用, 正是在信號提高嗎? Xcode將向您顯示問題的確切內容和堆棧。

當您確定崩潰發生在stringWithFormat:方法中時,可能是格式說明符的問題。 Apple的《 字符串編程指南》包含有關如何以安全且獨立於平台的方式處理NSInteger 信息

也許您需要合成您的財產?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM