2013-08-08 1 views
0

Как я могу висеть на следующей структуре вне метода, который он создал? Я пытаюсь присвоить ему переменную или свойство экземпляра без большой удачи.Удерживание структуры

@property(nonatomic) CTParagraphStyleSetting defaultParagraphSettings; 

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


self.defaultParagraphSettings = settings; генерирует следующее сообщение об ошибке:

Assigning to 'CTParagraphStyleSetting' (aka 'struct CTParagraphStyleSetting') from incompatible type 'CTParagraphStyleSetting [4]'


я буду об этом правильном пути?

+0

Одна проблема: вы хотите, чтобы 'defaultParagraphSettings' имел тип' CTParagraphStyleSetting * ', а не' CTParagraphStyleSetting'. – mipadi

+2

Это еще хуже - он назначил бы указатель на стек памяти, который мгновенно выйдет из области действия, и поэтому его содержимое будет неопределенным. – jhabbott

ответ

2

Сообщение об ошибке говорит вам, что переменная settings имеет тип массива из CTParagraphStyleSetting, свойство defaultParagraphSettings имеет тип CTParagraphStyleSetting. Таким образом, у вас есть две проблемы: (1) типы несовместимы и (2) (Objective-) C не поддерживает назначение массива.

Я не могу сказать вам, как это исправить, поскольку это зависит от того, что вы пытаетесь сделать. Но, например, заявление:

self.defaultParagraphSettings = settings[0]; 

должен назначить первый элемент массива этому свойству.

+0

Спасибо CRD. это полезно. То, что я пытаюсь сделать, - висеть на все содержимое настроек, а не только на первый элемент. Таким образом, я могу повторно использовать его позже, чтобы создать CTParagraphStyleRef. – Matt

+0

Тем не менее, я начинаю думать, что привязка настроек к методу, который возвращает struct/array, вероятно, проще. - Цель состоит в том, чтобы избежать дублирования кода. – Matt

+0

@Matt - У вас есть 3 структуры поля, просто создайте, когда это необходимо - удерживать их для повторного использования - это больше проблем, чем того стоит. Если вы действительно хотите, чтобы «коллекция» этого одного параметра вместо массива, который вы должны индексировать, пишите метод, который принимает «индекс», выполняет «переключатель» и возвращает «элемент». – CRD

 Смежные вопросы

  • Нет связанных вопросов^_^