Как решить эту ошибку?"свойство с атрибутом 'retain (или strong)' должно иметь тип объекта" - PullRequest
30 голосов
/ 12 января 2012

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

Ответы [ 6 ]

56 голосов
/ 12 января 2012

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

Попробуйте добавить @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
36 голосов
/ 16 сентября 2013

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

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

@property (nonatomic, assign) NSInteger integValue;
6 голосов
/ 12 января 2012

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

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

1 голос
/ 10 января 2017

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

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

//#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
1 голос
/ 28 марта 2015

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

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

0 голосов
/ 18 июля 2017

Не писать заявление на импорт. Пишите @ класс.

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

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...