2012-01-28 19 views
12

Tôi đang cố gắng thêm phông chữ tùy chỉnh vào dự án của tôi trong Xcode 4.2, nhưng bất cứ khi nào tôi cố gắng sử dụng nó, tôi nhận được lỗi rằng đối tượng là không.UIFont với phông chữ tùy chỉnh không thành công với Nil

Tôi đã làm như sau:
1) Thêm một hàng để plist của tôi 'Phông chữ được cung cấp bởi ứng dụng' giá trị: "LCDMono2 Ultra.ttf"
2) Thêm font cho tập tin hỗ trợ của tôi và cho thấy nó trong XCode để xác minh nó đã được thêm vào.
3) đã kích hoạt sử dụng Get Info rằng Tên đầy đủ là "LCDMono2 Ultra"
4) Tạo phông chữ trong dự án của tôi với:

UIFont *myFont = [UIFont fontWithName:@"LCDMono2 Ultra" size:16]; 

và tôi đã cố gắng biến thể này:

UIFont *myFont = [UIFont fontWithName:@"LCDMono2 Ultra" size:16.f]; 

5) Đã cố gắng sử dụng tên phông chữ (addObject:myFont.fontName), tạo ra lỗi 'nil'.

Điều gì có thể gây ra lỗi? Nó có thể là một cái gì đó giống như không gian trong tên?

+3

Sử dụng '[UIFont familyNames]' để xem phông chữ của bạn có thực sự bị "nhìn thấy" bởi hệ điều hành hay không. Điều đó ít nhất sẽ thu hẹp mọi thứ. Tôi đã có một số loại tệp phông chữ iOS sẽ không nhận ra. – smparkes

+0

@smparkes - Tôi vừa làm điều đó trước khi tôi đọc câu trả lời của bạn! Và chắc chắn, Xcode sẽ tự động xóa không gian và tên hiển thị là "LCDMono2Ultra" và hoạt động. Đó không phải là cách luôn luôn? Cảm ơn. – wayneh

+1

Có thể không phải là Xcode. Đó có thể là cách tên phông chữ được mã hóa trong tệp phông chữ. Một chút gợi ý vô cớ: iOS chỉ cho phép bạn tải hai khuôn mặt từ một gia đình vì vậy nếu bạn đang sử dụng nhiều hơn hai khuôn mặt từ một gia đình, bạn sẽ cần phải thay đổi tên gia đình trên mỗi khuôn mặt là duy nhất. Mất một lúc để theo dõi ... – smparkes

Trả lời

12

Không gian trong Tên đầy đủ của phông chữ đã được gỡ bỏ tự động sau khi thêm nó vào dự án. Tôi đã kiểm tra tệp phông chữ gốc và không gian ở đó, vì vậy Apple không được muốn xử lý các khoảng trắng. Tôi đã thay đổi tham chiếu thành "LCDMono2Ultra" và nó hoạt động.

+4

Nó không phải là một "không muốn đối phó với không gian", tôi tin rằng nó sử dụng tên PostScript của phông chữ. –

+4

David Dunham là chính xác. Nói chung, nếu bạn sẽ thực sự mã hóa cứng tên của một phông chữ trong mã của mình, bạn nên luôn sử dụng tên PostScript đầy đủ để tham chiếu đến phông chữ. (Chính tên PostScript không cho phép các khoảng trống). Nếu bạn không chắc chắn nó là gì, hãy cài đặt phông chữ trên Mac của bạn với Font Book, sau đó trong Font Book, chọn 'Preview> Show Font Info' để hiển thị các tên khác nhau, bao gồm cả tên PostScript. Tên PostScript của "LCDMono2 Ultra" là 'LCDMono2Ultra'. – NSGod

+0

Đúng, bạn nói đúng. Tôi đã không cài đặt phông chữ trên hệ thống của tôi, vì vậy tôi không thể nhận được thông tin đó từ cuốn sách phông chữ. Sau khi cài đặt nó, tôi có thể thấy tên Postscript. Cảm ơn. – wayneh

2

Bạn đã đặt điểm ngắt và kiểm tra xem bạn có nhận được đối tượng UIFont hợp lệ cho myFont không. Đây là giá trị kiểm tra như nhiều khả năng vấn đề là "LCDMono2 Ultra" thực sự là tên họ phông chữ và những gì bạn muốn được sử dụng là một cái gì đó như "LCDMono2 Ultra-bình thường" hoặc "LCDMono2 Ultra-đậm". Mở .ttf của bạn với Font Book và xem những thông tin nó mang lại cho bạn.

Hoặc nếu bạn không thể tìm thấy bất cứ điều gì trong Font Book bạn có thể thử gọi:

NSArray *fonts = [UIFont fontNamesForFamilyName:"LCDMono2 Ultra"]; 

Và sau đó chỉ cần in các phông chữ mảng trong trình gỡ lỗi để kiểm tra những gì họ nên được.

Hope trợ giúp này, cho tôi biết nếu điều này không làm việc và tôi sẽ cố gắng nghĩ về cái gì khác :)

+0

Cảm ơn, nhưng tôi đã tìm ra giải pháp - xem bình luận của tôi ở trên. – wayneh

8

Tôi đã gặp vấn đề tương tự trong vài giờ và đã thử tất cả những điều trên và không hoạt động, phông chữ đã được thêm ở mọi nơi cần thiết và thậm chí tôi đã thử các phông chữ hoạt động trong các ứng dụng khác, nhưng chưa bao giờ xuất hiện được thêm vào ứng dụng này.

Có vẻ như đã có thay đổi trong Xcode 5 phông chữ được thêm vào trong thuộc tính đích trong tab thông tin để làm việc trong khi trước đó chúng phải được thêm vào trong "appName-info.plist", hãy xem hình ảnh bên dưới:

Hy vọng điều này sẽ giúp người khác.

enter image description here

+0

Quan trọng: thêm toàn bộ tên tệp, với phần mở rộng. –

0

Tìm phông chữ của bạn (có thể với tên khác) và sử dụng tên này.

for (NSString *familyName in [UIFont familyNames]) { 
     for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) { 
      NSLog(@"%@", fontName); 
     } 
    } 
0

Tập tin phông chữ của tôi là "Futura Heavy.ttf", sau đó tôi sử dụng - thay thế không gian như dưới đây thì nó hoạt động!

class func futuraHeavy() -> UIFont { 
     return UIFont(name: "Futura-Heavy", size: 12)! 
    } 
Các vấn đề liên quan