如何在IOS中读取结构数组

时间:2013-07-23 00:47:15

标签: ios objective-c

我正在尝试从NSArray创建一个CGPoint数组,每个条目都是NSPoint

 NSArray *points = [_terrain getPathPoints];
 CCLOG(@"Terrain Points=%@",points);

日志输出:

Terrain Points=(
    "NSPoint: {-3.4324746, 70.220947}",
    "NSPoint: {-3.9852712, 70.136444}",
    "NSPoint: {-4.3119373, 70.058411}",
    "NSPoint: {-4.4321384, 69.986282}",
    "NSPoint: {-4.3655362, 69.919479}",
    "NSPoint: {-4.131794, 69.857513}",
    "NSPoint: {-3.7505748, 69.799774}"
)

getPathPoints是我正在使用的第三方工具的方法。此方法返回NSPoint数组。如何从上述数据创建CGPoint数组?

2 个答案:

答案 0 :(得分:2)

您所看到的内容最有可能是NSValueCGPoint结构创建的对象(您无法将CGPointNSPoint直接放入NSArray) 。他们记录为NSPoint的事实可能有点令人困惑(来自Mac的遗迹,NSPointCGPoint基本相同),但您可以轻松转换这样的“盒装”使用CGPoint方法返回CGPointValue的值,例如

NSArray *points = [_terrain getPathPoints];
NSValue *lastPointValue = [points lastObject];
CGPoint lastPoint = [lastPointValue CGPointValue];
//...

答案 1 :(得分:1)

您是否阅读了documentation

  

图形类型转化

     

当在Cocoa和Quartz代码之间来回切换时,可能需要对数据类型进行一些转换。表9-1显示了一些基本Quartz类型的Cocoa等价物。

Table 9-1  Simple data-type conversions
    Cocoa type       Quartz type
      NSRect           CGRect
      NSPoint          CGPoint
      NSSize           CGSize
     

虽然在每种情况下结构布局都相同,但是不能将Quartz数据类型直接传递给期望Cocoa类型的方法。要进行转换,必须从一种类型转换为另一种类型,如以下示例所示:

NSRect cocoaRect = *(NSRect*)&myCGRect;