我在viewController中定义了两个NSMutableString对象(UITableViewController的子类).h文件:
NSMutableString *firstName;
NSMutableString *lastName;
它们是属性:
@property (nonatomic, retain) NSMutableString *firstName;
@property (nonatomic, retain) NSMutableString *lastName;
我在.m文件中合成它们。
在我的viewDidLoad方法中 - 我将它们设置为空字符串:
firstName = [NSMutableString stringWithString:@""];
lastName = [NSMutableString stringWithString:@""];
firstName和lastName可由用户更改。在我的cellForRowAtIndexPath方法中,我试图显示这些字符串的内容:
cell.detailTextLabel.text = [NSString stringWithFormat:@"%@ %@", firstName, lastName];
但是这会导致应用程序在显示视图控制器后立即崩溃。使用调试器,似乎firstName和lastName都是“超出范围”或者它们不存在。我是Xcode的新手,但调试器似乎停在了objc_msgSend。
我做错了什么?
答案 0 :(得分:6)
问题在于您需要:
self.firstName = ...
self.lastName = ...
这将调用自动生成的setter方法,这将保留值。通过直接分配,你绕过了setter,一旦当前自动释放池被耗尽,这两个变量就会有悬空指针。
答案 1 :(得分:1)
习惯于self.variableName
...而不是stringWithsString
尝试使用initWithString
...希望它能解决问题...顺便说一句,你已经很好地解释了这个问题...
答案 2 :(得分:0)
您的单元格正在加载并在初始化之前访问firstName和lastName。 viewDidLoad为时已晚,请尝试使用awakeFromNib或viewWillLoad或iPhone上的任何内容。
答案 3 :(得分:0)
你不能使用:
firstName = [NSMutableString stringWithString:@""];
因为viewDidLoad
执行完成后会立即解除分配。
尝试:
firstName = [[NSMutableString alloc] initWithString:@""];
或者:
[self setFirstName:[NSMutableString stringWithString:@""]];
不要忘记在firstName
消息上发布lastName
和dealloc
。
答案 4 :(得分:0)
你用过什么样的细胞样式?
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:BasicCellIdentifier] autorelease];
}
也许这会对你有帮助