2010-11-17 2 views
1

Как скопировать один NSString в другой?Скопируйте один NSString в другой

@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 

У меня есть два объекта этого типа. MyData * obj1, obj2;

Первый инициализирован. Во-вторых, я хочу сначала инициализировать.

obj2 = [obj1 copy]; //crashes 

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

Я неэпид. КОПИРОВАТЬ второй объект НЕ СОХРАНЯЕТ !!! Помоги пожалуйста! Thanx!

+0

Является ли obj2 фактически MyData *? Вам нужны MyData * obj1, * obj2; – Eiko

+0

Да. Эти переменные одинакового типа! – yozhik

+0

MyData * obj1, * obj2; Я просто забыл астерикс. – yozhik

ответ

4

ваш объект, вероятно, следует реализовать саму копию:

@implementation MyData 

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

.... 
@end 
+0

Объекты имеют дефференционные адреса, но !!!! Объект NSString имеет EQUAL-адреса. Мне нужны разные адреса. – yozhik

+0

, тогда вы должны скопировать их, используя obj.name = [self.name copy] и т. Д. – Romain

+0

Я пробовал -> не помогать – yozhik

2

Изменения использовать копию ваших @ свойства, вместо того, чтобы сохранить:

@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; 

Обратите внимание, что вы также не нужен правопреемник для UID. Просто оставь эту часть. Затем вы можете легко создать копию путем выделения и инициализации второго объекта MyData и присвоения свойств:

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

Этот вариант не рекомендуется в моей ситуации. – yozhik