目标c类属性变量未填充

时间:2012-06-19 07:33:30

标签: objective-c class properties

我有以下简单的类定义:

// 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-&gt; currentPath的PathString和PathArr属性为空,我认为它们应该具有“简单”。请帮忙!

1 个答案:

答案 0 :(得分:0)

您必须确保在创建NSString对象时初始化NSMutableArrayCurrentPath属性。否则,对stringByAppendingString的调用将导致nil,因为它会被发送到nil对象。

一种可行的方法可能是

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约定并使用以小写字母开头的属性名称。