Как решить эту ошибку? "свойство с атрибутом' 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>