web-dev-qa-db-ja.com

このエラーを解決する方法は? 「 'retain(or strong)'属性を持つプロパティはオブジェクト型でなければなりません」

Xcodeがライブラリなどをダウンロードしてから問題が発生するまで、私は1日中アプリを開発してきました。 APPDelegateからいくつかの配列を取得するために、getter/setterメソッドを作成しようとしています。私が言ったように、それはうまく機能していて、このエラーでランダムに現れて、もうビルドしません:

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
30
Rob

ヘッダーファイルの再帰的なインクルードが原因のようです。

このように、Task.hに@class Projectと@class TeamMemberを追加してみてください

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

@class TeamMember;
@class Project;

@interface Task : NSObject{
    NSDate *endDate;
    NSDate *startDate;
    ...
}
@end
56
Linghua Zhang

NSObjectサブクラスではないものを保持しようとしています。通常、これは、誰かがfloatまたはintを保持しようとしたときに発生します。

NSIntegerはスカラーであり、オブジェクトではありません。したがって、それを保持するべきではなく、割り当てる必要があります。プロパティを変更すると、警告メッセージが消去されます。 NSNumberを追加する必要はありません。

@property (nonatomic, assign) NSInteger integValue;
36
Rajneesh071

エラーは、NSObjectサブクラスではないものを保持しようとしているということです。通常、これは誰かがretain a floatまたはintを試みたときに起こります。

Projectには.hを表示しましたが、TeamMemberには表示しません。後者を確認してください。表示されない場合は、コードスニペットを更新してください。

6
PengOne

答えはすでに出ていますが、私の場合、問題は異なっていました。

別の方法で解決しました。 .hファイルFoundation frameworkはデフォルトで追加されます。だから私はcommentedラインとインポートUIKit framework。これで、コードを実行できるようになりました。

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

私は再帰的にいくつかの.hファイルをインポートしたので、それは私に起こりました。

これらのファイルを削除すると、プロジェクトが機能し始めました。

1
Pratik Gujarati

Importステートメントを記述しないでください。 @classを記述します。

例:-@class SecondViewController。

ありがとう

0
Mujahed Ansari