我是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
第三行给我一个警告和错误:
错误:
Pointer to non-const type 'id' with no explicit ownership
警告:
Property with 'iboutlet' attribute must be an object type (invalid '__strong id *')
正如我所说,我刚刚开始学习,我肯定会遗漏一些非常明显的东西。它似乎与'id'类型有关,但根据这本书,没有任何错误。
感谢您的帮助!
答案 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方法中,因为你需要释放你保留,创建或复制的每个对象。