2010-11-17 41 views
1

Comment copier un NSString dans un autre?Copie d'un NSString dans un autre

@interface MyData : NSObject 
{ 
    @private 

    //user's private info 
    NSInteger uID; 
    NSString *name; 
    NSString *surname; 
    NSString *email; 
    NSString *telephone; 

    //user's picture 
    UIImage *image; 
} 

@property (nonatomic, assign) int uID; 
@property (nonatomic, retain) NSString *name; 
@property (nonatomic, retain) NSString *surname; 
@property (nonatomic, retain) NSString *email; 
@property (nonatomic, retain) NSString *telephone; 
@property (nonatomic, retain) UIImage *image; 
@end 

J'ai deux objets de ce type. MyData * obj1, obj2;

La première est initialisée. Deuxièmement, je veux initialiser avec le premier.

obj2 = [obj1 copy]; //crashes 

    newData.surname = data.surname; //crashes to 
    newData.email = data.email; 
    newData.telephone = data.telephone; 

Je ne reçois pas une COPIE du deuxième objet PAS RETENU !!! Aidez-moi, s'il vous plaît! Merci!

+0

Est-ce que obj2 est réellement un MyData *? Vous avez besoin de MyData * obj1, * obj2; – Eiko

+0

oui. Ces variables de type égal! – yozhik

+0

MyData * obj1, * obj2; J'ai juste oublié l'astérix. – yozhik

Répondre

4

votre objet devrait mettre en œuvre sans doute la copie elle-même:

@implementation MyData 

-(id)copyWithZone:(NSZone *)zone 
{ 
    MyData *obj = [[[self class] alloc] init]; 
    obj.uID = self.uId; 
    obj.name = self.name 
    ... 
    return obj; 
} 

.... 
@end 
+0

Les objets ont des adresses différentes mais !!!! L'objet NSString a des adresses EQUAL. J'ai besoin d'adresses différentes. – yozhik

+0

alors vous devez les copier, en utilisant obj.name = [self.name copy] et ainsi de suite – Romain

+0

J'ai essayé -> ne pas aider – yozhik

2

Changer votre utilisation de la propriété @ pour la copie au lieu de retenir:

@property (nonatomic) int uID; 
@property (nonatomic, copy) NSString *name; 
@property (nonatomic, copy) NSString *surname; 
@property (nonatomic, copy) NSString *email; 
@property (nonatomic, copy) NSString *telephone; 
@property (nonatomic, copy) UIImage *image; 

Notez que vous n'avez pas besoin assign pour l'uid. Laissez juste cette partie. Ensuite, vous pouvez facilement créer une copie en allouant et en initiant un deuxième objet MyData et en affectant les propriétés:

MyData data = [[MyData alloc] init]; 
newData.surname = data.surname; 
newData.email = data.email; 
newData.telephone = data.telephone; 
+0

Cette variante n'est pas recommandée dans ma situation. – yozhik