0

次の単純なクラス定義があります。

//mycommon.h

@interface CurrentPath : NSObject
@property (nonatomic, strong) NSString* PathString;
@property (nonatomic, strong) NSMutableArray* PathArr;
- (void) addAddressToPath:(NSString*) address;
@end

//mycommon.m

@implementation CurrentPath : NSObject

@synthesize PathString;
@synthesize PathArr;

- (void) addAddressToPath:(NSString*) address{
    NSLog(@"addAddressToPath...");

    // Add to string
    self.PathString = [self.PathString stringByAppendingString:address];

    // Add to Arr
    [self.PathArr addObject:address];
}

@end

別のクラスでは#import<mycommon.h>、次のように変数を宣言します。

@interface myDetailViewController : 
{
        CurrentPath* currentPath;
}
- (void) mymethod;
    @end

そして

@implementation myDetailViewController

- void mymethod{
self->currentPath = [[CurrentPath alloc] init];
NSString* stateSelected = @"simple";
    [self->currentPath addAddressToPath:stateSelected];
}
@end

問題は、self->currentPath の PathString および PathArr プロパティが、このメソッド呼び出しの後に空になることです。これは、「単純」である必要があると思います。助けてください!

4

1 に答える 1

0

オブジェクトの作成時にNSStringNSMutableArrayプロパティが初期化されていることを確認する必要があります。CurrentPathそれ以外の場合、toの呼び出しは、オブジェクトに送信されるためにstringByAppendingString発生します。nilnil

実行可能な方法の1つは、おそらく

self.currentPath = [NSString string];
// or
self.currentPath = @"";
[self.currentPath addAddressToPath:@"simple"];

addAddressToPathよりエレガントで堅牢なのは、メソッドのnilプロパティをチェックすることです。

if (!self.pathString) self.pathString = [NSString string]; 
if (!self.pathArr) self.pathArr = [NSMutableArray array];

Objective-cの規則に従っており、小文字で始まるプロパティ名を使用していることに注意してください。

于 2012-06-19T07:52:31.523 に答える