2011-12-29 20 views
7

NSDictionaryCGRectを格納する際に問題が発生しているようです。アップNSValueに私のCGRectをラップし、辞書にそれを保存する必要がありNSDictionaryがCGRectを正しく保存していませんか?

dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"Crocodile", [NSValue valueWithCGRect:CGRectMake(100,100,200,200)], nil]; 

を私は何を読んでから、:私が使用しているコード。私はNSLogにそれをしようとしたとき、私は私の辞書数をチェックしている{{0,0}、{0,0}}

NSLog(@"Crocodile value is: %@", NSStringFromCGRect([[dictionary objectForKey:@"Crocodile"] CGRectValue])); 

しかし、値が戻るなどの項目が挿入されているように見えます。これがどこで失敗しているのか分かりません。私はまたCGRect var、次にNSValue varを作成し、それを同じ結果を持つ辞書に貼り付けることによって手動でそれを分解しようとしました。

助けてください。ありがとうございます

ありがとうございます。

答えて

19

引数の順序は(object、key、object、key、...)である必要があります。したがって、コードではオブジェクトは@"Crocodile"であり、キーはrectです。

は、それらを交換し、それが動作するはずです:

dictionary = [NSDictionary dictionaryWithObjectsAndKeys: 
    [NSValue valueWithCGRect:CGRectMake(100,100,200,200)], // object first… 
    @"Crocodile", // …then key 
    nil]; 

注キーはNSStringのインスタンスのことを要求されないことを、彼らはNSCopyingに準拠したクラスのインスタンスすることができます。

+0

で回復します。私はこれらの例に従っていました: http://cocoadevcentral.com/articles/000010.php – user339946

+0

@ user339946私はその記事の著者に連絡して、コードが間違っていると伝えます。 –

+0

ああ、公正であるために、記事は2001年に出版されました:/ – user339946

10

あなたはNSStringのようにそれを保存することができます -

 NSStringFromCGRect(<#CGRect rect#>) 

そしてうわー、あなたは正しい

  CGRectFromString(<#NSString *string#>) 

グッドラック

+0

これはありがとう、これは非常に便利で簡単です! – PetrV

+0

+1アニメーションデータをNSDictionaryに収集するのに役立ちました。 – iwasrobbed

+0

おかげで、もっと明確な方法です – Resty

関連する問題