ios NSDictionary总是显示为空

时间:2012-02-10 15:41:57

标签: ios

ħ

#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._datanil。但是,asdf是我在self._data中所期望的正确字典值。是什么给了什么?

背景故事:因为我通常使用MRC / ARC种语言,所以GC我是n00b。

1 个答案:

答案 0 :(得分:1)

你对断点提出了哪些代码?如果它只是一个空行,它实际上会破坏前一个有效的代码行,这可能是在设置self._data之前。

尝试使用NSLog(@“data%@”,self._data);而不是你的断点,看看记录了什么。

顺便说一句,我看到你有[xml发布],你注释掉了,大概是因为它无法正常工作。这一行错误的原因是[XMLReader dictionaryForXMLString ...]返回一个不应该再次释放的自动释放对象。

通常,在Objective-C中,如果方法名称不以“new”,“alloc”或“copy”开头,那么它将返回一个您不需要自行释放的自动释放对象。