2012-02-10 11 views
0

H

#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; 
} 

Iブレークポイントをヒットした場合、self._dataためnilあるが現れます。しかし、の値asdfは、私がself._dataで期待する正しい辞書の値です。何がありますか?IOS NSDictionaryのは常に空

裏話:私は通常ARC/GC言語を使用すると、それはMRCに来るとき、私はN00Bです。

答えて

1

ブレークポイントに対してどの行のコードを適用しましたか?それが単なる空白行だった場合、self._dataが設定される前の有効なコード行で実際に破棄されます。

NSLog(@ "data%@"、self._data)を入れてみてください。あなたのブレークポイントの代わりに何が記録されるのかを見てください。

ところで、おそらくそれが機能していなかったため、あなたがコメントした[xml release]があります。この行が間違っているのは、[XMLReader dictionaryForXMLString ...]が再び解放されるべきでない自動解放オブジェクトを返すからです。

一般にObjective-Cでは、メソッド名が "new"、 "alloc"または "copy"で始まらない場合は、自分自身を解放する必要のない自動解放オブジェクトを返します。

+0

これはずっと働いていたようですが、ちょっとした理由のために、 'self._dict'の* value *は' 'です。また、asdfが正しいデータとして表示される* self._dataを*割り当てた直後にNSDictionary * asdf = self._data;を追加することもわかりました! *奇妙な*。 – Jacksonkr