3

私はObjective-Cが初めてで、本を読み進めようとしています。エラーに遭遇したとき、私はかなり基本的なチュートリアルに従っていました。コードは本と同じです。

と のクラスがMyController.hありMyController.mます。エラーは、宣言中に発生します。

MyController.h:

#import <Foundation/Foundation.h>
@interface MyController : NSObject
@property (assign) IBOutlet id *textLabel;

- (IBAction)clickMeButtonClicked:(id)sender;
- (IBAction)deleteMeButtonClicked:(id)sender;

@end    

3 行目で警告とエラーが表示されます。

エラー:

Pointer to non-const type 'id' with no explicit ownership

警告:

Property with 'iboutlet' attribute must be an object type (invalid '__strong id *')

私が言ったように、私は学び始めたばかりで、ここで非常に明白な何かが欠けていることは確かです. 「id」型が関係しているようですが、本によると異常はありません。

ご協力ありがとうございました!

4

4 に答える 4

3

idすでにポインタです:

typedef struct objc_object {
     Class isa;
} *id;

*したがって、宣言は必要ありません。試す:

@property (assign) IBOutlet id textLabel;
于 2012-12-05T15:32:17.887 に答える
0

idポインタとして宣言する必要はありません。それを宣言する正しい方法は次のとおりです。

@property (assign) IBOutlet id textLabel;//Don't need the *

この質問idでタイプのより包括的な説明を見つけることができます

于 2012-12-05T15:28:30.207 に答える
0

assign( ) を ( ) に変更してみてくださいnonatomic, retain。これは IBOutlet でありプリミティブではないため、保持して解放する必要があります。非アトミックをそこに置くことも良い習慣です。それはスレッドと関係がありますが、それについて正確な情報を提供することはできません. さらに、保持、作成、またはコピーしたすべてのオブジェクトを解放する必要があるため、dealloc メソッドに [textLabel release] を入れることを忘れないでください。

于 2012-12-05T15:39:08.560 に答える
0

Assign はおそらく strong に変更し、textLabel の前の * を削除する必要があります。

于 2012-12-05T15:31:49.653 に答える