0

Xcode を 8.0 (8A218a) にアップグレードしたばかりで、Swift 2.3 のプロジェクトを Swift 3.0 に変換しています。現在残っている唯一の問題は、次のエラーです。

「ibtool 実行中の例外: UTIToIconTransformer という名前の値トランスフォーマーが見つかりません」

は次のUTIToIconTransformerように定義されます。

@objc(UTIToIconTransformer) class UTIToIconTransformer : ValueTransformer {
    // ...
}

Swift 2.3 のとき、コードは正常に機能しました。この値トランスフォーマーを使用するバインディングは、次のように設定されます。

ここに画像の説明を入力

このバインドを削除すると、アプリが実行され、行のタイトルが正しく表示されます。

ここでここで StackOverflowで、ここで NShipsterで提案されているようNSValueTransformer.setValueTransformer()に、アプリデリゲートの+initialize()applicationDidFinishLaunchingおよび値トランスフォーマーので呼び出してみました (ただし、「通常、シングルトンインスタンスは +initialize に登録されます。値変換サブクラスのメソッドであるため、それ以上のセットアップなしで使用できます。" は Apple のドキュメントに準拠しています)、すべて成功しませんでした。+initialize()

アップルのドキュメントでは、それは言う

Value transformers are typically registered by an application’s delegate 
class, in response to receiving a initialize: class message. This allows 
registration to occur early in the application startup process, providing
access to the value transformers as nib files load.

Availability in Interface Builder

Your NSValueTransformer subclasses are not automatically listed in the
Interface Builder bindings inspector. When inspecting a binding you can enter
the name that the value transformer is registered with, but the functionality 
will not be present in Interface Builder’s test mode. When your application 
is compiled and run the transformer will be used. 

しかし、に登録しても役に立ちませんでしたAppDelegateoverride class func initialize()Xcode 7 と Swift 2.3 では、登録なしでも機能しました。

4

1 に答える 1

0

NSOutlineView最後に、ストーリーボードから を削除して新しいストーリーボードを設定することで問題を解決しました。にバインドされたアウトラインビューを持つ別のプロジェクトがありNSTreeController、そのプロジェクトは Xcode 8.0 アップグレード後も問題ありません。ValueTransformerそれから、新しい名前で新しいものを作成しようとしましたが、うまくいきませんでした。絵コンテに問題があるのではないかと思い、アウトライン図を作り直してみました。そうすれば、Xcode はトランスフォーマーが見つからないと文句を言いません!

于 2016-09-16T06:41:41.843 に答える