0

私はコードを持っています

[target invokeSelector:handler.successAction withObject:object];

一部のメソッドを呼び出す場合があります。オブジェクトの有無にかかわらず。デバッグでは完全に動作しますが、リリースではクラッシュします:

Nov 20 21:55:13 efpies project[7202] <Warning>: >>>> selector: successfulLogin
Nov 20 21:55:13 efpies project[7202] <Warning>: >>>> target: <AppDelegate: 0x1f595a90>
Nov 20 21:55:13 efpies project[7202] <Warning>: >>>> object: <7b226d65 73736167 65223a22 5c753034 31325c75 30343435 5c753034 33655c75 30343334 205c7530 3434305c 75303433 305c7530 3433375c 75303434 305c7530 3433355c 75303434 385c7530 3433355c 75303433 64227d> NSConcreteMutableData
Nov 20 21:55:13 efpies project[7202] <Error>: -[AppDelegate invokeSelector:withObject:]: unrecognized selector sent to instance 0x1f595a90

Nov 20 21:56:12 efpies project[7205] <Warning>: >>>> selector: driversUpdated:
Nov 20 21:56:12 efpies project[7205] <Warning>: >>>> target: <DriversList: 0x1cd5ffd0>
Nov 20 21:56:12 efpies project[7205] <Warning>: >>>> object: (
    ) __NSArrayM
Nov 20 21:56:12 efpies project[7205] <Error>: -[DriversList invokeSelector:withObject:]: unrecognized selector sent to instance 0x1cd5ffd0

これらのメソッドは利用可能です (ヘッダー ファイルにも表示されます)。どうしたの?データとオブジェクトは 100% 正しい

4

2 に答える 2

1

使用する

[target performSelector:handler.successAction withObject:object]; 

がこれを処理するので、これがココアタッチでこれを行う方法NSObjectです。詳細については、 Apple のドキュメントを参照してください。

于 2012-11-20T18:03:47.147 に答える
0

結局のところ、これinvokeSelector:withObject:は静的ライブラリのカテゴリメソッドです。静的ライブラリのカテゴリは自動的に読み込まれないため、次のように記述する必要があります

-force_load $(BUILD_ROOT)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/lib_name.a

ターゲットの依存関係としてコンパイルされる場合は、ターゲットのOther linker flagフィールドに。Build settings

于 2012-11-20T23:03:53.277 に答える