2012-10-02 37 views
2

我不確定發生了什麼。我已經嘗試了很多東西來找出導致EXC_BAD_ACCESS的特定代碼行上發生了什麼。 我試過啓用NSZombies,但它並沒有幫助我。下面是代碼:NSString sizeWithFont上的EXC_BAD_ACCESS

- (int)linesFromText:(NSString *)string withFont:(UIFont *)font andSize:(CGSize)size { 
    NSArray *splitString = [string componentsSeparatedByString:@" "]; 
    NSMutableArray *allLines = [NSMutableArray array]; 
    NSMutableString *line = [NSMutableString string]; 
    NSString *word; 
    NSString *fakeLine; 
    for (int i = 0; i < splitString.count; i++) { 

     word = [splitString objectAtIndex:i]; 
     fakeLine = [NSString stringWithFormat:@"%@%@ ",line, word]; 
     //NSLog(@"line %@, font %@",fakeLine,font); 

     ////THIS IS THE LINE CAUSING THE EXC_BAD_ACCESS 
     CGSize lineSize = [fakeLine sizeWithFont:font]; 

     if (lineSize.width <= size.width) { 
      [line appendFormat:@"%@ ", word]; 
     } else { 
      [allLines addObject:[line stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]]; 
      line = [NSMutableString string]; 
      [line appendFormat:@"%@ ", word]; 
     } 


    } 
    [allLines addObject:[line stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]]; 
    return allLines.count; 
} 

這是推動我瘋了因爲它只有當你滾動的日子在我建立應用程序快速發生在新的iPhone 5。下面是該應用程序的鏈接在商店:

http://itunes.apple.com/us/app/id543324451?mt=8

,如果你有一個iPhone 5,你可以明白我的意思。 iPhone 4不這樣做。

此代碼在UITableViewCell的layoutSubviews中調用,並有助於調整使用TTTAttributedLabel(https://github.com/mattt/TTTAttributedLabel)的自定義屬性標籤的大小。

我也試圖使「Gaurd的malloc嘗試給我更多的細節,但我的XCode給我這個錯誤:

使dyld:無法加載插入庫‘/usr/lib/libgmalloc.dylib’,因爲沒有圖像發現

這要是我期待在/ usr/lib下該文件是一個符號鏈接,並在同一目錄下存在的文件: libgmalloc.dylib - > libgmalloc.B.dylib

我跑出來這裏的想法,並認爲它可能是UIFont即將發佈,然後它不可用,所以我把參考文獻在U ITableViewCell持有UIFont直到Cell的生命結束。

我也搜遍了互聯網,並沒有發現這些具體細節。

而且,這裏是我的堆棧跟蹤從調試器的圖像:

http://i.stack.imgur.com/gWC5L.png

任何想法? 我提供了足夠的信息嗎?

感謝

+1

我會說它幾乎肯定是與字體。爲了測試這個,用一個本地UIFont變量替換它。如果使用局部變量時問題沒有了,那麼你知道你的問題在哪裏。 – Bergasms

+0

我試着將它設置爲一個局部變量,它仍然有問題。我會爲明天的局部變量嘗試一種不同的方法,看看那裏是否有問題。 –

+0

你有沒有設置一個斷點來判斷字體在你嘗試使用它的時候是否爲零?這將是一個快速的方法,看看它是否有問題。 – Dima

回答

0

我認爲你的問題在這裏回答:

UIStringDrawing methods don't seem to be thread safe in iOS 6

短的版本:sizeWithFont,和其他大多數UIKit的方法,當你使用它的不是線程安全的屏幕(而不是用它來預先渲染)。好消息:看看Adam Swinden在該主題中的回答;他解釋瞭如何使用CoreText而不是UIKit在iOS6中獲得相同的結果。

相關問題