如何解决这个错误?"具有'retain(或strong)'属性的属性必须是对象类型"

Rob*_*Rob 31 iphone objective-c ios4 ios

我一直在处理一个应用程序,它一直工作正常,直到Xcode下载库或其他东西,然后它开始出现问题.我只是想创建getter/setter方法来从我的APPDelegate中获取几个数组.就像我说它工作正常然后随机出现这个错误现在将不再构建:

property with 'retain(or strong)' attribute must be of object type
Run Code Online (Sandbox Code Playgroud)

这是代码的其余部分:

#import <Foundation/Foundation.h>
#import "Project.h"
#import "TeamMember.h"


@interface Task : NSObject{

NSDate *endDate;
NSDate *startDate;
NSMutableString* notes;
NSMutableString* taskName;

//The error appears first right here over teamMember
TeamMember *teamMember;
Project *project;

}
//The error appears over both of the following lines as well...
@property  (nonatomic, retain)TeamMember *teamMember;
@property  (nonatomic, retain) Project * project;

@property (nonatomic, retain) NSMutableString *notes;
@property (nonatomic, retain) NSMutableString *taskName;
@property (nonatomic, retain) NSDate *startDate;
@property (nonatomic, retain) NSDate *endDate;


@end
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?这让我难过......

这是Project.h:

#import <Foundation/Foundation.h>
#import "Task.h"

@interface Project : NSObject{

NSDate *dueDate;
NSDate *startDate;
NSArray *tasksInProject;
NSMutableString* notes;
NSMutableString* description;
NSMutableString* projectName; 

}
@property (nonatomic, retain) NSDate *startDate;
@property (nonatomic, retain) NSDate *dueDate;
@property (nonatomic, retain) NSArray *tasksInProject;
@property (nonatomic, retain) NSMutableString *description;
@property (nonatomic, retain) NSMutableString *projectName;
@end
Run Code Online (Sandbox Code Playgroud)

这是TeamMember.h

#import <Foundation/Foundation.h>
#import "Task.h"
#import "Project.h"

@interface TeamMember : NSObject{

NSMutableArray *projects;
NSMutableString *name;
NSMutableString *title;
NSMutableString *email;
NSMutableString *phone;
NSMutableString *notes;
}

//@property(nonatomic, retain) NSArray *projects;
@property (nonatomic, retain) NSMutableString *name;
@property (nonatomic, retain) NSMutableString *title;
@property (nonatomic, retain) NSMutableString *email;
@property (nonatomic, retain) NSMutableString *phone;
@property (nonatomic, retain) NSMutableString *notes;
@end
Run Code Online (Sandbox Code Playgroud)

Lin*_*ang 57

看起来它是由递归包含头文件引起的.

尝试将@class Project和@class TeamMember添加到Task.h中,就像这样

#import <Foundation/Foundation.h>
#import "Project.h"
#import "TeamMember.h"

@class TeamMember;
@class Project;

@interface Task : NSObject{
    NSDate *endDate;
    NSDate *startDate;
    ...
}
@end
Run Code Online (Sandbox Code Playgroud)

  • +1但是你还应该解释一下,对于Project.h和TeamMember.h的`import`s应该被移动到Task.m,既然前向声明到位了 - 循环依赖还没有被破坏! (5认同)

Raj*_*071 37

您试图保留不是NSObject子类的内容.通常,当有人试图保留float或int时会发生这种情况.

NSInteger是标量而不是对象.所以你不应该保留它,它应该被分配.更改您的属性将清除警告消息.您不需要执行添加的NSNumber内容.

@property (nonatomic, assign) NSInteger integValue;
Run Code Online (Sandbox Code Playgroud)


Pen*_*One 6

错误是您试图保留不是NSObject子类的内容.通常,当有人试图这发生retain一个floatint.

你已经展示了.h Project但不是TeamMember.检查后者,如果你没有看到它,那么更新你的代码片段.