iPhone SDK синтезирующий массив BOOL - PullRequest
2 голосов
/ 23 января 2010

Я получаю ошибку компилятора при попытке синтезировать массив bool следующим образом:

// .h

#import <UIKit/UIKit.h>


@interface SomeViewController : UIViewController {

    BOOL boolArray[100];
}

@property (nonatomic) BOOL boolArray;

@end


//m

#import "SomeViewController"


@implementation SomeViewController

@synthesize boolArray;

@end

Возможно, я допустил фундаментальную ошибку, но сейчас могу ее найти, синтез с использованием boolArray [100] тоже не сработал.

1 Ответ

0 голосов
/ 23 января 2010

Вам, вероятно, нужен полный тип, т.е. @property (неатомный) BOOL boolArray [100] ;

[100] - это важная информация о типе, а не просто указание того, сколько места нужно выделить.

Кроме того, я думаю, что свойство будет обрабатываться как const BOOL *, которое не может быть назначено, поэтому, вероятно, оно должно быть readonly. Правильнее всего сделать это, вероятно, только для чтения, что означает, что thins будет извлекать указатель массива, а затем индексировать его для назначения членам массива.

В качестве альтернативы вы можете использовать NSArray для этого, но для этого потребуется, чтобы вы использовали NSNumber s с boolVaules, с которым приходится иметь дело больше с биотчем.

UPDATE

На самом деле глупому компилятору не нравится [] по некоторым причинам. Попробуйте это:

@interface TestClass : NSObject {

    const BOOL *boolArray;
}

@property (nonatomic, readonly) const BOOL *boolArray;

@end


@implementation TestClass;

- (const BOOL *)boolArray {
    if (!boolArray)
        boolArray = malloc(sizeof(BOOL) * 100);
    return boolArray;
}

- (void)dealloc {
    [super dealloc];
    free((void *)boolArray);
}

@end

ДРУГОЕ ОБНОВЛЕНИЕ

Это компилируется:

@interface TestClass : NSObject {

    BOOL boolArray[100];
}

@property (nonatomic, readonly) const BOOL *boolArray;

@end


@implementation TestClass;

- (const BOOL *)boolArray {
    return boolArray;
}

@end

Это странная проблема. Хотелось бы, чтобы компилятор объяснил, что именно ему не нравится, например: «Не удается объявить свойство с типом массива» или что-то в этом роде.

ЕЩЕ ДРУГОЕ ОБНОВЛЕНИЕ

Смотрите этот вопрос: Создайте свойство целых чисел в Objective C

Очевидно, в соответствии со спецификацией C, массив не является типом «Обычные старые данные», а спецификация Objective-C позволяет объявлять свойства только для типов POD. Предположительно, это определение POD:

http://www.fnal.gov/docs/working-groups/fpcltf/Pkg/ISOcxx/doc/POD.html

Но чтение того, что кажется массивом POD, является POD. Так что я не понимаю.

...