Советы по устранению проблемы с UIAppFonts на iPad - PullRequest
0 голосов
/ 01 октября 2010

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

Пост здесь: http://web.archiveorange.com/archive/v/nagQXB5eX3YsQpevIXMk

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

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

0 0xffff028f в __spin_lock

1 ??

Конкретный код, вызывающий Проблема:

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

Казнь никогда не выходит за пределы вторая строка.

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

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

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

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

1 Ответ

0 голосов
/ 02 октября 2010

Ну, ничего при выяснении этого поста, но я нашел решение, опубликованное кем-то на форумах 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.h и приведя результат dlsym к следующему:

(BOOL ()(const char ))

Я не изменял исходное сообщение на тот случай, если эта ошибка меня просто затронула.

...