我是一名新的iPhone开发者。我正在使用一个使用两个表视图的应用程序。 我的代码在iOS 6上运行良好,但是当我去iOS 7并尝试启动应用程序时,我遇到了以下错误。 根据网上的一些答案,我启用僵尸。 返回的初始错误消息是 EXC_BAD_ACCESS 。当我启用NSZombieEnabled时,我收到错误消息" - [CFString retain]:消息发送到解除分配的实例"
这是一段代码,抛出错误, 导致错误的是,
SystemViewController.h
if(indexPath.section == 0)
{
//User Info section
if(indexPath.row == 0)
{
cell2.label1.text = @"User";
cell2.label2.text = [UserInfoBean userName];
}
else
{
cell2.label1.text = @"SI Host URL";
cell2.label2.text = [UserInfoBean url];
}
cell = cell2;
}
Interface UserInfoBean.h
@implementation UserInfoBean
static NSString *userName;
static NSString *url;
static NSString *presentNode;
+ (NSString *)userName { return userName; }
+ (NSString *)url { return url; }
+ (NSString *)presentNode { return presentNode; }
+ (void)setUserName:(NSString *)newVar { userName = newVar; }
+ (void)setUrl:(NSString *)newVar { url = newVar; }
+ (void)setPresentNode:(NSString *)newVar { presentNode = newVar; }
@end
Thanks in advance!
答案 0 :(得分:1)
我建议使用属性而不是编写自己的变量访问器方法,如下所示:
@property (nonatomic, retain) NSString *userName;
编译器负责所有设置/获取这些变量,使用 retain 将执行以下操作:
保留对象会创建强引用,而对象则不能 被解除分配,直到所有强引用都被释放。如果两个 对象相互保留,对象都不会被释放 因为它们之间的联系不能被打破
创建属性后,可以删除getter / setter方法,只需使用UserInfoBean.userName = @""设置或NSString * something = UserInfoBean.userName得到。