Как решить эту ошибку? "свойство с атрибутом" сохранить (или сильным) "должно быть типа объекта"
Я работаю над приложением весь день, который работал нормально до тех пор, пока 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
Ответы
Ответ 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
Ответ 2
Вы пытаетесь сохранить что-то, что не является подклассом NSObject. Обычно это происходит, когда кто-то пытается сохранить float или int.
NSInteger - это скаляр, а не объект. Поэтому вы не должны его сохранять, он должен быть назначен. Измените свое свойство, чтобы очистить предупреждающее сообщение. Вам не нужно делать материал NSNumber, который вы добавили.
@property (nonatomic, assign) NSInteger integValue;
Ответ 3
Ошибка заключается в том, что вы пытаетесь сохранить что-то, что не является подклассом NSObject
. Обычно это происходит, когда кто-то пытается retain
a float
или int
.
Вы показали .h для Project
, но не для TeamMember
. Проверьте последний для этого, и если вы его не увидите, обновите фрагмент кода.
Ответ 4
Это случилось со мной, потому что я рекурсивно импортировал некоторые .h файлы.
Я удалил эти файлы, и мой проект начал работать.
Ответ 5
Ответ уже дан. Но в моем случае проблема была другой.
Я решил это по-другому. В .h
файл Foundation framework
добавляется по умолчанию. Итак, я commented
строка и импортируем UIKit framework
. Теперь я могу запустить свой код.
//#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
Ответ 6
Не записывать оператор импорта.
Напишите @class.
Пример: -
@class SecondViewController.
Спасибо