Как решить эту ошибку? "свойство с атрибутом' retain(или strong) ' должно иметь тип объекта"

Я работал над приложением весь день, который работал нормально, пока 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

какие идеи? Это меня ковылявший....

вот проект.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

6 ответов


похоже, что это вызвано рекурсивным включением файлов заголовков.

попробуйте добавить @class Project и @class TeamMember в свою задачу.h, вот так

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

@class TeamMember;
@class Project;

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

вы пытаетесь сохранить что-то, что не является подклассом NSObject. Обычно это происходит, когда кто-то пытается сохранить float или int.

NSInteger является скаляром, а не объект. Поэтому вы не должны сохранять его, он должен быть назначен. Изменение свойства очистит предупреждающее сообщение. Вам не нужно делать вещи NSNumber, которые вы добавили.

@property (nonatomic, assign) NSInteger integValue;

ошибка, что вы пытаетесь сохранить что-то, что не является NSObject подкласс. Обычно это происходит, когда кто-то пытается retain a float или int.

вы показали .ч Project а не TeamMember. Проверьте последний для этого, и если вы его не видите, обновите фрагмент кода.


Это случилось со мной, потому что я рекурсивно импортировали .H-файлы.

Я удалил эти файлы и мой проект начал работать.


ответ уже дан, но в моем случае проблема была другой.

я решил это по-другому. В Foundation framework добавляется по умолчанию. Так что я commented строка и импорт UIKit framework. Теперь я могу запустить свой код.

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

Не пишите инструкцию import . Напишите @class.

пример :- @class SecondViewController.

спасибо