3

我是 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

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

分配可能应该更改为强,并删除 textLabel 之前的 *。

于 2012-12-05T15:31:49.653 回答
0

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

于 2012-12-05T15:39:08.560 回答