8

NSDictionary キー値に CGSize を指定しようとしていますが、XCode でこのエラーが発生しています。私のコード:

       NSArray *rows = @[
        @{@"size" : (CGSize){self.view.bounds.size.width, 100}
          }
        ];

ここでエラーが発生するのはなぜですか? CGSize を dict に格納することが不可能な場合、代替アプローチは何ですか?

編集:次 のコードで「算術、ポインター、またはベクトル型が必要な使用された型 'CGSize' (別名 'struct CGSize') というエラーが発生するようになりました:

NSDictionary *row = rows[@0];
CGSize rowSize = [row[@"size"] CGSizeValue] ? : (CGSize){self.view.bounds.size.width, 80};
4

2 に答える 2

24

CGSizeはオブジェクトではありません。C構造体です。これを obj-c コレクションに格納する必要がある場合、標準的な方法はNSValue、次のように でラップすることです。

NSArray *rows = @[
 @{@"size" : [NSValue valueWithCGSize:(CGSize){self.view.bounds.size.width, 100}]
  }
];

後で元に戻す必要がある場合は、メソッドをCGSize呼び出すだけです。-CGSizeValue

CGSize size = [rows[0][@"size"] CGSizeValue];
于 2013-03-18T21:41:49.827 に答える
0

ケビンの答えは iOS でのみ機能します。Mac OS X (Cocoa) の場合:

[NSValue valueWithSize:NSMakeSize(self.view.bounds.size.width, 100)];
于 2016-09-12T23:42:20.243 に答える