2010-11-17 161 views
1

如何将一个NSString复制到另一个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; 

我neeeeed的第二个对象不保留一个COPY!请帮助!感谢名单!

+0

obj2实际上是一个MyData *?你需要MyData * obj1,* obj2; – Eiko 2010-11-17 15:45:33

+0

是的。这种相同类型的变量! – yozhik 2010-11-17 15:48:25

+0

MyData * obj1,* obj2;我只是忘记了asterix。 – yozhik 2010-11-17 15:49:00

回答

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 2010-11-17 16:07:35

+0

然后你应该复制他们,使用 obj.name = [self.name复制] 等 – Romain 2010-11-17 16:15:27

+0

我试过 - >不帮 – yozhik 2010-11-17 16:18:59

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的分配。只要把那部分放开。然后你可以很容易地通过alloc创建一个副本,并启动第二个MyData对象并分配属性:

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

这个变体不推荐在我的情况下使用。 – yozhik 2010-11-17 15:59:47

相关问题