请注意以下代码中的两个NSLOG语句。打印出“aaa”,但“bbb”从未打印过。相反,模拟器与EXC_BAD_ACCESS崩溃。我知道这通常意味着我试图访问的对象过早地被释放。我无法弄清楚出了什么问题......
更新:
这是我的.h
#import <UIKit/UIKit.h>
@interface vcAddCat : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate> {
NSManagedObjectContext *managedObjectContext;
IBOutlet UIPickerView * pickerView;
NSArray * _weights;
NSArray * _categories;
IBOutlet UILabel *lastCat;
IBOutlet UILabel *lastWeight;
}
我没有任何数组的@property或@synthesize行...
以下是我的.m
中的两个剪辑- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@">>> Entering %s <<<", __PRETTY_FUNCTION__);
_categories=[[NSArray alloc] initWithObjects: @"Homework",@"Quizzes",@"Tests", @"Mid-Term Exam", nil];
;
NSLog(@"aaa");
_weights=[[NSArray alloc] initWithObjects: @"1",@"2",@"3",@"4", @"5", @"6", @"7", @"8", @"9", @"10", @"11", @"11", @"12", @"13", @"14", @"15", @"16", @"17", @"18", @"19", @"20", @"21",@"22",@"23", @"24", @"25", nil];
NSLog(@"bbb");
..这里是我发布数组的地方......
- (void)dealloc {
[super dealloc];
[_categories release];
[_weights release];
NSLog(@">>> Leaving %s <<<", __PRETTY_FUNCTION__);
}
答案 0 :(得分:6)
好的 - 输家警报。
对不起,伙计们。当我早期测试只插入10个物体时,一切正常。一旦我开始,我添加了其余的对象(11 - 100),那就是崩溃的时候。当我发布上面的代码时,我将对象列表截断为25个项目 - 似乎太多了。
好吧,对象26,36,46等都有一个拼写错误,我在字符串值之前省略了前面的'@'。
修正了这一点,我又回到了正轨。
感谢您的帮助,并对跛脚错误表示抱歉。
菲尔
答案 1 :(得分:0)
看看问题出在你的_weights数组中。调试代码&amp;当你到达第二个NSLog时检查,数组的值是什么,是否正确保留。你是否将数组作为属性&amp;合成它
在你的.h文件中
NSArray *_weights;
@property( nonatomic, retain ) NSArray *_weights;
在你的.m文件中
@synthesize _weights
答案 2 :(得分:0)
我只是将确切的代码放入我拥有的应用程序中,它运行得很好。我达到了“bbb”。所以,我的问题是,你是如何定义_weights的?在我的班上,我正在使用:
@interface MyClass : NSObject {
NSArray* _weights;
}
答案 3 :(得分:0)
请将您的dealloc更改为
- (void)dealloc {
[_categories release];
[_weights release];
[super dealloc];
}
在释放班级的其他对象之前,切勿调用[super dealloc];
。
答案 4 :(得分:0)
尝试进入可执行文件的参数设置并将NSZombieEnabled转为YES。这将使您的程序停在导致内存访问不良的确切行。