我有以下简单的类定义:
// 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属性为空,我认为它们应该具有“简单”。请帮忙!
答案 0 :(得分:0)
您必须确保在创建NSString
对象时初始化NSMutableArray
和CurrentPath
属性。否则,对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约定并使用以小写字母开头的属性名称。