【问题标题】:How to solve this error? "property with 'retain(or strong)' attribute must be of object type"如何解决这个错误? “具有‘保留(或强)’属性的属性必须是对象类型”
【发布时间】:2012-01-11 23:50:06
【问题描述】:

我整天都在开发一个应用程序,它一直运行良好,直到 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

【问题讨论】:

    标签: iphone objective-c ios ios4


    【解决方案1】:

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

    尝试将@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 但您还应该说明 Project.h 和 TeamMember.h 的 #imports 应该移动到 Task.m,因为前向声明已经到位 - 循环依赖已经还没坏呢!
    • 所以只是为了澄清这一点,我有一个类似的项目,但我不认为自己在做循环依赖,但如果我添加类它就会消失(我想因为我告诉它它是一个类)应该我只是将这个类的标题添加到 M 文件中,然后将其作为属性与 H 文件上的@class 一起保留?
    【解决方案2】:

    您试图保留不是 NSObject 子类的东西。这通常发生在有人试图保留浮点数或整数时。

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

    @property (nonatomic, assign) NSInteger integValue;
    

    【讨论】:

      【解决方案3】:

      错误是您试图保留不是NSObject 子类的内容。这通常发生在有人尝试retainfloatint 时。

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

      【讨论】:

      • 我看了看,它们都继承自 Object...我编辑了代码以包含两者。我刚刚注意到它还说“未知类型名称 TeamMember 作为错误...
      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

          【解决方案6】:

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

          中像这样导入 custom view 的标头
          #import "abc.h"
          

          这确实有效

          【讨论】:

            【解决方案7】:

            不要写导入语句。 写@class。

            示例:- @class SecondViewController。

            谢谢

            【讨论】:

              猜你喜欢
              • 2022-11-09
              • 2016-01-23
              • 2013-10-24
              • 2012-05-18
              • 2010-11-23
              • 2020-03-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多