J'ai travaillé sur une application toute la journée qui fonctionnait bien jusqu'à ce que Xcode télécharge des bibliothèques ou quelque chose comme ça, puis ça a commencé à avoir des problèmes. J'essaie simplement de créer les méthodes getter/setter pour extraire quelques tableaux de mon APPDelegate. Comme je l'ai dit, cela fonctionnait bien, puis au hasard, il est apparu avec cette erreur et ne sera plus construit:
property with 'retain(or strong)' attribute must be of object type
Voici le reste du code:
#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
Des idées? Cela m'a dérouté ....
Voici 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
Voici 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
Il semble que cela soit dû à l'inclusion récursive de fichiers d'en-tête.
Essayez d'ajouter @class Project et @class TeamMember dans votre Task.h, comme ceci
#import <Foundation/Foundation.h>
#import "Project.h"
#import "TeamMember.h"
@class TeamMember;
@class Project;
@interface Task : NSObject{
NSDate *endDate;
NSDate *startDate;
...
}
@end
Vous essayez de conserver quelque chose qui n'est pas une sous-classe NSObject. Cela se produit généralement lorsque quelqu'un essaie de conserver un flottant ou un int.
NSInteger est un scalaire et non un objet. Vous ne devez donc pas le conserver, il doit être attribué. Changer votre propriété effacera le message d'avertissement. Vous n'avez pas besoin de faire les choses NSNumber que vous avez ajoutées.
@property (nonatomic, assign) NSInteger integValue;
L'erreur est que vous essayez de conserver quelque chose qui n'est pas une sous-classe NSObject
. Cela se produit généralement lorsque quelqu'un essaie de retain
a float
ou int
.
Vous avez affiché le .h pour Project
mais pas pour TeamMember
. Vérifiez ce dernier pour cela, et si vous ne le voyez pas, mettez à jour votre extrait de code.
La réponse est déjà donnée Mais dans mon cas, la question était différente.
Je l'ai résolu d'une manière différente. Dans .h
fichier Foundation framework
est ajouté par défaut. Donc je commented
la ligne et j'importe UIKit framework
. Maintenant, je peux exécuter mon code.
//#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
Cela m'est arrivé parce que j'ai importé récursivement des fichiers .h.
J'ai supprimé ces fichiers et mon projet a commencé à fonctionner.
N'écrivez pas la déclaration d'importation. Écrivez @class.
Exemple: - @class SecondViewController.
Merci