Нельзя использовать точечный синтаксис Objective-C для установки значения членов структуры, если вы ссылаетесь на саму структуру через синтаксис точки как свойство Objective-C.Фактически, компилятор должен предупредить вас об этом.
Чтобы проиллюстрировать, что если foo
является структурой с элементом bar
, вы не можете сделать это:
anObjCobject.foo.bar = 42;
Однако,Вы можете назначить целую структуру этому свойству следующим образом:
foobar.bar = 42; // where foobar is a struct of the same type as foo
anObjCobject.foo = foobar;
Путаница, вероятно, связана с тем, что вы можете получить доступ к значению члена структуры, которое является свойствомОбъект Objective C с использованием точечной нотации:
NSLog("%lu", anObjCobject.foo.bar); //outputs 42, perfectly legal
Проблема заключается только в установщиках, геттеры работают нормально с точечной нотацией.
Кроме того, следует также избегать использования методов доступа в ‑init
методы, вы должны вместо этого установить ивары напрямую.
Вам понадобится что-то вроде этого:
- (id) initWithCoder: (NSCoder *) coder{
if((self = [super init]))
{
[self prepareApp];
anzahlanalysewerte = [coder decodeIntForKey:@"anzahlanalysewerte"];
//self.analyse needs to be malloc'd to accomodate the size of anzahlanalysewerte as well
for(int i=0; i< self.anzahlanalysewerte; i++)
{
bildanalyse foo;
foo.winkelo = [coder decodeFloatForKey: [NSString stringWithFormat:@"winkelo%d",i]];
foo.winkelr = [coder decodeFloatForKey: [NSString stringWithFormat:@"winkelr%d",i]];
...
foo.skalfak = [coder decodeFloatForKey: [NSString stringWithFormat:@"skalfak%d",i]];
analyse[i] = foo;
}
}
return self;
}