Ios 抓住一个结构

Ios 抓住一个结构,ios,objective-c,ios5,struct,Ios,Objective C,Ios5,Struct,在创建以下结构的方法之外,我如何挂起它?我一直在尝试将其分配给实例变量或属性,但运气不太好 @property(nonatomic) CTParagraphStyleSetting defaultParagraphSettings; - (void)someMethod { CTParagraphStyleSetting settings[] = { { kCTParagraphStyleSpecifierAlignment, sizeof(CTTextAlignmen

在创建以下结构的方法之外,我如何挂起它?我一直在尝试将其分配给实例变量或属性,但运气不太好

@property(nonatomic) CTParagraphStyleSetting defaultParagraphSettings;

- (void)someMethod {
    CTParagraphStyleSetting settings[] = {
        { kCTParagraphStyleSpecifierAlignment, sizeof(CTTextAlignment), &alignment },
        { kCTParagraphStyleSpecifierLineBreakMode, sizeof(CTLineBreakMode), &lineBreakMode },
    };
    self.defaultParagraphSettings = settings;
}

self.defaultParagraphSettings=设置生成以下错误:

Assigning to 'CTParagraphStyleSetting' (aka 'struct CTParagraphStyleSetting') from incompatible type 'CTParagraphStyleSetting [4]' 从不兼容的类型“CTParagraphStyleSetting[4]”分配到“CTParagraphStyleSetting”(也称为“struct CTParagraphStyleSetting”)

我这样做对吗?

错误消息告诉您变量
settings
的类型为数组
CTParagraphStyleSetting
,属性
defaultParagraphSettings
的类型为
CTParagraphStyleSetting
。因此有两个问题,(1)类型不兼容,(2)(目标-)C不支持数组赋值

我无法告诉你如何修复它,因为这取决于你正在尝试做什么。但例如,声明:

self.defaultParagraphSettings = settings[0];

应将数组的第一个元素分配给属性。

一个问题:您希望
defaultParagraphSettings
的类型为
CTParagraphStyleSetting*
,不是
CTParagraphStyleSetting
。更糟糕的是,它会将指针分配给堆栈内存,该内存会立即超出范围,因此其内容将是未定义的。谢谢CRD。这很有帮助。我试图做的是保留设置的全部内容,而不仅仅是第一个元素。通过这种方式,我可以在以后重用它来创建CTParagraphStyleRef。但是我开始认为将设置粘贴到返回结构/数组的方法中可能更容易。-我们的目标是避免重复代码。@Matt-您有一个3字段的结构,只需在需要时创建即可-保留它们以供重复使用是非常麻烦的。如果您真的想要这些元素的“集合”,那么一个选项就是不要数组,您必须为数组编制索引,编写一个采用“索引”的方法,执行一个
开关
,并返回“元素”。