8

我正在尝试给一个 NSDictionary 键值一个 CGSize,而 XCode 给了我这个错误。我的代码:

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

为什么我在这里收到错误?如果不可能将 CGSize 存储在字典中,那么另一种方法是什么?

编辑: 现在得到“使用类型'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 回答