#import <UIKit/UIKit.h>
@interface LoginViewController : UIViewController <UITextFieldDelegate>
@property (nonatomic, retain) NSDictionary *_data;
@end
#import "LoginViewController.h"
#import "XMLReader.h"
@implementation LoginViewController
static NSDictionary *_raceInformation;
@synthesize _data, bibInput, lastNameInput, error;
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
NSError *e = [NSError alloc];
NSString *xml = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"testhalfmarathon" ofType:@"xml"] encoding:NSUTF8StringEncoding error:&e];
NSDictionary *asdf = [XMLReader dictionaryForXMLString:xml error:nil];
self._data = [XMLReader dictionaryForXMLString:xml error:nil];
//[xml release];
//[e release];
// !! BREAKPOINT HERE
}
return self;
}
当我点击断点时,self._data
的值为nil
。但是,asdf
的值是我在self._data
中所期望的正确字典值。是什么给了什么?
背景故事:因为我通常使用MRC
/ ARC
种语言,所以GC
我是n00b。
答案 0 :(得分:1)
你对断点提出了哪些代码?如果它只是一个空行,它实际上会破坏前一个有效的代码行,这可能是在设置self._data之前。
尝试使用NSLog(@“data%@”,self._data);而不是你的断点,看看记录了什么。
顺便说一句,我看到你有[xml发布],你注释掉了,大概是因为它无法正常工作。这一行错误的原因是[XMLReader dictionaryForXMLString ...]返回一个不应该再次释放的自动释放对象。通常,在Objective-C中,如果方法名称不以“new”,“alloc”或“copy”开头,那么它将返回一个您不需要自行释放的自动释放对象。