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

このタイプのオブジェクトが 2 つあります。MyData *obj1, obj2;

まずは初期化。2番目に最初に初期化したい。

obj2 = [obj1 copy];   //crashes

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

保持しない 2 番目のオブジェクトのコピーが必要です!!! 助けてください!ありがとう!

4

3 に答える 3

5

NSString メソッドstringWithStringを使用できます。

stringwithstring も参照してください。単に同じ文字列を与えるよりも、これが好まれる場合を理解するために。

于 2010-11-17T15:51:18.453 に答える
4

オブジェクトはおそらくコピー自体を実装する必要があります。

@implementation MyData

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

....
@end
于 2010-11-17T15:50:30.420 に答える
2

@property を変更して、retain ではなく copy を使用します。

@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 の割り当ても必要ないことに注意してください。その部分だけ残してください。次に、2 番目の MyData オブジェクトを割り当てて初期化し、プロパティを割り当てることで、コピーを簡単に作成できます。

MyData data = [[MyData alloc] init];
newData.surname = data.surname;   
newData.email = data.email;
newData.telephone = data.telephone;
于 2010-11-17T15:56:15.423 に答える