2014-07-23 5 views
9

जब मैं CGFontCreateWithDataProviderपर कॉल करता हूं जबकि हवाई जहाज मोड में, मेरे ऐप्स फ्रीज होते हैं। हवाई जहाज मोड में नहीं, यह ठीक काम करता है। फ़ॉन्ट डिवाइस पर संग्रहीत है, कोई नेटवर्क एक्सेस नहीं होनी चाहिए।CGFontCreateWithDataProvider हवाई जहाज मोड में लटकता है

इस विधि बुला एक स्थानीय फ़ॉन्ट फ़ाइल को लोड करने जबकि:

[self registerIconFontWithURL:[[NSBundle mainBundle] URLForResource:@"FontAwesome" withExtension:@"otf"]]; 

निम्न विधि में url का मान: file: /// var/मोबाइल/आवेदन/48D3DA14-235B-4450 -A081-7A6BA6116667/Blah.app/FontAwesome.otf

+ (void)registerIconFontWithURL:(NSURL *)url 
{ 
    NSAssert([[NSFileManager defaultManager] fileExistsAtPath:[url path]], @"Font file doesn't exist"); 
    CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL((__bridge CFURLRef)url); 

//******Freezes after the next line****** 
    CGFontRef newFont = CGFontCreateWithDataProvider(fontDataProvider); 
//******FROZEN****** 

    CGDataProviderRelease(fontDataProvider); 
    CFErrorRef error; 
    CTFontManagerRegisterGraphicsFont(newFont, &error); 
    CGFontRelease(newFont); 
} 

आईओएस 7.1.x, iPhone 5

मुझे नहीं पता कि यह क्यों हो सकता है और वहां कोई मदद नहीं मिली है। क्या किसी के पास कोई सुराग है कि ऐसा क्यों हो सकता है?

अग्रिम धन्यवाद!

+0

प्रासंगिक कोड पोस्ट करें। – rmaddy

+0

'url' का मूल्य क्या है? – rmaddy

+0

@rmaddy आपने बहुत जल्द देखा, यह अब है =) – DiscDev

उत्तर

24

मुझे थोड़ी अधिक खोज के बाद उत्तर मिला।

निम्नलिखित बग रिपोर्ट के अनुसार: https://alpha.app.net/jaredsinclair/post/18555292

अगर कोई नेटवर्क कनेक्शन नहीं है, CGFontCreateWithDataProvider() एक सेमाफोर जाल अगर यह appDidFinishLaunchingWithOptions दौरान कहा जाता है में लटका हुआ है। इसे अगले रन लूप में कॉल करना फांसी के बिना काम करता है।

एक ही पोस्ट में बताया गया है,

[UIFont familyNames]

बुला CGFontCreateWithDataProvider() से पहले

समस्या का समाधान। मेरा कोड अब इस तरह दिखता है और अपेक्षित काम करता है:

+ (void)registerIconFontWithURL:(NSURL *)url 
{ 
    NSAssert([[NSFileManager defaultManager] fileExistsAtPath:[url path]], @"Font file doesn't exist"); 
    CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL((__bridge CFURLRef)url); 

    //THE NEXT LINE IS RELEVANT PART 
    [UIFont familyNames]; 

    CGFontRef newFont = CGFontCreateWithDataProvider(fontDataProvider); 
    CGDataProviderRelease(fontDataProvider); 
    CFErrorRef error; 
    CTFontManagerRegisterGraphicsFont(newFont, &error); 
    CGFontRelease(newFont); 
} 
+4

बहुत उपयोगी उत्तर - धन्यवाद! – mattsven

+2

कॉलिंग '[यूफॉन्ट परिवार नाम];' मेरी समस्या तय! वाह! आपने इसे कैसे समझ लिया: o – Hlung

+0

@ ह्लंग मैंने चारों ओर गुगल किया और मेरे जवाब में बग रिपोर्ट मिली ... मुझे बचाया =) – DiscDev

संबंधित मुद्दे