Question

I am not sure what is going on anymore. I have tried so many things to for me to figure out whats going on on this specific line of code that is causing a EXC_BAD_ACCESS. I tried enabled NSZombies but it didn't help me any. Here is the code:

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

This is driving me crazy cause it only happens on the new iphone 5 when you scroll through the days to fast in the app I built. Here is a link to the application in the store:

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

if you have an iphone 5 you can see what I mean. iphone 4 doesn't do this.

This code is being called in a UITableViewCell's layoutSubviews and is there to help size the frame of a Custom Attributed label that uses TTTAttributedLabel (https://github.com/mattt/TTTAttributedLabel).

I also tried to enable "Gaurd malloc to try give me more details but my XCode gives me this error:

dyld: could not load inserted library '/usr/lib/libgmalloc.dylib' because image not found

which if I look in /usr/lib that file is a sym link to a file that does exist in the same directory: libgmalloc.dylib -> libgmalloc.B.dylib

I am running out of ideas here and thought it might be the UIFont getting released to soon and then it not being available so I put references in the UITableViewCell to hold the UIFont until the end of that Cell's life.

I have also searched around the internet and haven't found that much on this specifics.

Also here is an image of my stack trace from debugger:

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

Any ideas? Did I provide enough info?

Thanks

Was it helpful?

Solution

I think your question is answered here:

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

The short version: sizeWithFont, and most other UIKit methods, are not thread safe when you're using it on the screen (rather than using it to pre-render).

The good news: look at Adam Swinden's answer in that thread; he explains how to get the same result in iOS6 with CoreText instead of UIKit.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top