“CGSize”类型的集合元素不是Objective-C对象

时间:2013-03-18 21:39:40

标签: objective-c core-graphics nsdictionary cgsize

我正在尝试将一个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};

2 个答案:

答案 0 :(得分: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];

答案 1 :(得分:0)

凯文的答案仅适用于iOS;对于Mac OS X(Cocoa)来说:

[NSValue valueWithSize:NSMakeSize(self.view.bounds.size.width, 100)];