2010-10-01 5 views
0

Недавно я нашел это сообщение, которое, похоже, описывает ту же проблему, что и у меня с добавлением собственного ttf. Мое приложение зависает. Тем не менее, несколько вещей, связанных с этим сообщением, меня путают, и я хотел бы получить некоторую помощь в расшифровке.Советы по отладке проблемы UIAppFonts на iPad

Сообщение здесь: http://web.archiveorange.com/archive/v/nagQXB5eX3YsQpevIXMk

Соответствующие отрывки, которые я пытаюсь понять ниже:

Прикрепление отладчик и задержавшись приложение показывает не особенно полезный стек вызовов:

0 0xffff028f в __spin_lock

1 ??

Специальный код, который вызывает проблему:

CTFontCollectionRef коллекция = CTFontCollectionCreateFromAvailableFonts (NULL); CFArrayRef fonts = CTFontCollectionCreateMatchingFontDescriptors (коллекция); for (id fontDescRef in (NSArray *) шрифты) {CFStringRef fontName = CTFontDescriptorCopyAttribute ((CTFontDescriptorRef) fontDescRef, kCTFontNameAttribute); NSLog (@ "% @", fontName); CFRelease (FontName); }
CFRelease (fonts);

Выполнение никогда не перемещается за пределы линии .

Вопрос: Как он выяснил, какая линия и функция вызывают проблему? Было ли это связано с отображением разборки, ее отображением в смешанном режиме или просмотром шестнадцатеричного значения в файле карты? Я хотел бы узнать, как это было сделано.

После попросили поставить демку и поэтому исследовав дальше, я обнаружил, что проблема проявляется если код в моем применения: didFinishLaunchingWithOptions: но если у меня есть один и тот же материал в viewDidLoad моего начального вида контроллер.

Вопрос: что означает «код», который он имеет здесь? Проблема заключалась в добавлении пользовательских шрифтов с помощью значения plist, поэтому я не уверен, что он может сказать, или как я могу обойти мою проблему.

Пожалуйста, помогите!

+0

Вы когда-нибудь находили решение этой проблемы? –

+0

Я не думаю, что Apple исправила это, если это то, что вы имеете в виду. Однако я смог использовать обходной путь в ответе, который я написал ниже. – Joey

ответ

0

Ну, ничего не выяснив это сообщение, но я нашел обходное решение, опубликованное кем-то на форумах apple dev. В основном, называя это от applicationDidFinishLaunching Fn:

- (NSUInteger) loadFonts { 
    NSUInteger newFontCount = 0; 
    NSBundle *frameworkBundle = [NSBundle bundleWithIdentifier:@"com.apple.GraphicsServices"]; 
    const char *frameworkPath = [[frameworkBundle executablePath] UTF8String]; 
    if (frameworkPath) { 
      void *graphicsServices = dlopen(frameworkPath, RTLD_NOLOAD | RTLD_LAZY); 
      if (graphicsServices) { 
       BOOL (*GSFontAddFromFile)(const char *) = dlsym(graphicsServices, "GSFontAddFromFile"); 
       if (GSFontAddFromFile) 
        for (NSString *fontFile in [[NSBundle mainBundle] pathsForResourcesOfType:@"ttf" inDirectory:nil]) 
         newFontCount += GSFontAddFromFile([fontFile UTF8String]); 
      } 
    } 

    return newFontCount; 
} 

и убедившись, что включить dlcfn.ч и подавать результат dlsym к следующему:

(BOOL () (Const обугленного))

Я не изменил оригинальный пост только в случае, если эта ошибка была просто то, что повлияло на меня.

Смежные вопросы