2011-02-04 2 views
0

매우 이상한 상황을 다루고 있습니다. 내 iOS 응용 프로그램에 Attributed Strings를 구현하고 있는데, IOS 3.2 이상에서 사용할 수 있다는 경고가있었습니다. iPhone에서 3.1.3을 계속 지원하기 때문에 CoreText를 약하게 링크해야한다는 것을 알았습니다. 사용하기 전에 CoreText를 컴파일 할 때 약간의 시간이 걸릴 수 있습니다.iOS 3.1.3의 NSMutableAttributedString

프레임 워크를 약하게 링크했지만, 호기심에서 나는 그 클래스를 그대로 사용하여 3.1.3 장치에서 실행했습니다 ... 작동합니다. 내가 여기서 무엇을 놓치고 있는지, 왜 이렇게 충돌하지 않는지 나는 혼란 스럽다. 나는 이것이 3.1.3 장치라고 확신하지만 NSMutableAttributedString은 3.1.3의 숨겨진 클래스이므로 objective-c의 동적 특성 때문에 실제로 작동하지 않습니까?

답변

0

충돌이 발생하지 않고 실제로 작동 했습니까?

설정에 따라 존재하지 않는 클래스는 단지 nil이됩니다. Objective-C에서는 nil으로 메시지를 보낼 수 있습니다. 그런 다음 nil 또는 0을 반환합니다. 그런 다음 [[NSAttibutedString alloc] init]은 충돌하지 않고 nil을 반환 할 수 있습니다.

+0

나는 정보의 다음 조각을 제공 할 뻔 (AliSoftware @ https://github.com/AliSoftware/OHAttributedLabel에서)를 OHAttributedLabel을 만드는 내가 특별히하고있어 이 UILabel의 서브 클래스 NSAttributedStrings를 사용합니다. NSMutableAttributedString을 만들고 OHAttributedLabel을 만들고 NSAttributedString 속성을 특성 문자열로 설정했습니다. 장치가 NSAttributedString이 무엇인지 모를 경우에도 NSAttributedString 속성을 사용하여 개체를 인스턴스화하면 작동합니까? ... '작품'에 의해 나는 크래시가 아니라는 것을 의미합니다. – rrenna

1

저는 OHAttributedLabel 클래스의 저자입니다. 사용해 주셔서 감사합니다!

OHAttributedLabel이 CoreText 프레임 워크를 사용하여 NSAttributedStrings을 화면에 그리기 때문에 이상한 행동입니다.

CoreText는 iOS 3.2 이후에만 사용 가능하므로, iOS 3.2, 특히 iOS 3.1.3에서 CoreText가 어떻게 작동하는지 확인할 수 없습니다.

0

CoreText는 iOS 3.2에서 도입되었습니다. 약한 링크가 있으면 앱이 시작되지만 CoreText 함수를 호출하면 첫 번째 인스턴스에서 충돌합니다.

이전 버전과 여전히 호환되도록하려면 Quartz로 텍스트를 그려서 CT 코드를 약하게 만들 수 있습니다. 장치에 CT가 있는지 감지하고, 그렇다면 CT를 사용합니다. 그렇지 않으면 도면에 대한 원상 복귀 메커니즘이 생깁니다.

관련 문제