我一直在处理一个应用程序,它一直工作正常,直到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
答案 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
float
或int
时会发生这种情况。
您已为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。
谢谢