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

时间:2012-01-11 23:50:07

标签: iphone objective-c ios ios4

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

property with 'retain(or strong)' attribute must be of object type

以下是代码的其余部分:

#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

有什么想法吗?这让我难过......

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

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

7 个答案:

答案 0 :(得分:56)

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

尝试将@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

答案 1 :(得分:34)

您正在尝试保留不是NSObject子类的内容。通常当有人试图保留一个浮点数或int时会发生这种情况。

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

@property (nonatomic, assign) NSInteger integValue;

答案 2 :(得分:6)

错误在于您试图保留不是NSObject子类的内容。通常当有人试图retain floatint时会发生这种情况。

您已为Project显示.h,但TeamMember未显示.h检查后者,如果您没有看到,请更新您的代码段。

答案 3 :(得分:1)

它发生在我身上,因为我已经递归导入了一些.h文件。

我删除了这些文件,我的项目开始工作。

答案 4 :(得分:1)

已经给出答案但在我的情况下问题是不同的。

我以不同的方式解决了这个问题。在.h文件中默认添加Foundation framework。所以我commented行并导入UIKit framework。现在我可以运行我的代码了。

//#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

答案 5 :(得分:1)

如果我们自定义一个View,在ViewController中使用IBOutlet 我们只需像这样在我们的 ViewController

中导入 自定义视图 的标题
#import "abc.h"

这肯定有效

答案 6 :(得分:0)

不要写import语句。 写@class。

示例: - @class SecondViewController。

谢谢