2016-05-20 6 views
1

ではありません。Objective-Cの辞書の引数は、私がここでのコード行を持っているNSDictionaryの

punchList = [[[NSMutableDictionary alloc]initWithDictionary:[[areaData GetPunchListDataArray:communityDesc] objectForKey:@"Root"]] autorelease]; 

    punchList = [punchList objectForKey:@"KeyValue"]; 

は、私はエラーを取得していないとpunchListは、私はそれをやった最初の方法を働いていないのに来るか、読み込まれます。

+5

なぜあなたはまだ 'autorelease'を使用していますか? ARCには何が起こったのですか? – Arc676

+0

古いチュートリアルに従っていますか?あなたはもうautoreleaseは必要ありません。 –

答えて

2

コードを別々の変数で別々のステートメントに分割すると、より明確になる場合があります。文の第二のセットのように分けることができます

punchListDataArray = [areaData GetPunchListDataArray:communityDesc]; 
rootObject = [punchListDataArray objectForKey:@"Root"]; 

// This is not dictionary, so next line fails 
possibleDictionary = [rootObject objectForKey:@"KeyValue"]; 
punchList = [[[NSMutableDictionary alloc]initWithDictionary:possibleDictionary] autorelease]; 

:失敗例のように出て分けることができます

punchListDataArray = [areaData GetPunchListDataArray:communityDesc]; 
rootObject = [punchListDataArray objectForKey:@"Root"]; 
// A different variable is being used to initialize 
punchList = [[[NSMutableDictionary alloc]initWithDictionary:rootObject] autorelease]; 
punchList = [punchList objectForKey:@"KeyValue"]; 
1

punchList = [punchList objectForKey:@"KeyValue"];という行にエラーが表示されないということは、結果が正しいことを意味するものではありません。

これを試してみてください:

punchList = [[[NSMutableDictionary alloc]initWithDictionary:[[areaData GetPunchListDataArray:communityDesc] objectForKey:@"Root"]] autorelease]; 
punchList = [punchList objectForKey:@"KeyValue"]; 
NSLog(@"punchList is now a %@", [punchList class]); 
id someValue = [punchList objectoForKey:@"SomeKey"]; 

いくつかのクラスで、未知のセレクタobjectForKey:に関するメッセージでクラッシュする必要があり、そのコードを実行します。コンソールには、punchListが本当にその時点で何を伝えているかを示すログメッセージが表示されます。

理由は、コードの最初のブロックが失敗するのと同じ理由です。それは、結果がではないためです。

関連する問題