具有类型id的IBOutlet

时间:2012-12-05 15:26:56

标签: objective-c cocoa

我是Objective-C的新手并试图通过一本书。当我遇到错误时,我正在按照一个非常基本的教程。代码与书中的代码相同。

我有一个MyController.hMyController.m的课程。错误发生在声明期间。

MyController.h

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

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

@end    

第三行给我一个警告和错误:

错误:

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

警告:

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

正如我所说,我刚刚开始学习,我肯定会遗漏一些非常明显的东西。它似乎与'id'类型有关,但根据这本书,没有任何错误。

感谢您的帮助!

4 个答案:

答案 0 :(得分:3)

id已经是一个指针:

typedef struct objc_object {
     Class isa;
} *id;

因此,您在宣言中不需要*。尝试:

@property (assign) IBOutlet id textLabel;

答案 1 :(得分:0)

id不需要声明为指针。声明它的正确方法如下:

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

您可以在this question

中找到有关id类型的更全面的说明

答案 2 :(得分:0)

分配应该可以更改为strong,并在textLabel之前删除*。

答案 3 :(得分:0)

尝试将(assign)更改为(nonatomic, retain),因为这是一个IBOutlet而不是原语,您必须保留并释放它。将非原子放在那里也是一种好习惯,它与线程有关,但我不能给你关于它的确切信息。另外别忘了放[textLabel  在dealloc方法中,因为你需要释放你保留,创建或复制的每个对象。