Ошибка «подписанное значение не является ни массивом, ни указателем» в BOOL в подклассе - PullRequest
1 голос
/ 09 июня 2011

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

В другом классе это мой интерфейс со свойством.Просто назовите его ClassA для этого примера:

#import <Foundation/Foundation.h>
@interface ClassA : NSObject {
@public

    @public
        BOOL _deactivateLabelToggle;

}

@property(nonatomic, assign) BOOL deactivateLabelToggle;

.m

#import "ClassA.h"

@implementation ClassA
@synthesize deactivateLabelToggle = _deactivateLabelToggle;

BOOL _deactivateLabelToggle[100];

-(id) init{
    self = [super init];
    if (!self) {
        return nil;
    }

    return self;
}

- (void) dealloc{

    [super dealloc];

}   


@end

Мой заголовок основного класса

#import "ClassA.h"
@class ClassA;

@interface MainClass : CCLayer {

    ClassA *classA;
}


@property(nonatomic, retain) ClassA *classA;

@end

MainClass.m

#import "MainClass.h"

@implementation MainClass

@synthesize classA;

-(id) init {

    if( (self=[super init] )) {

          classA = [[ClassA alloc] init];

          classA.deactivateLabelToggle[i] = 0; // <---- Error here

    }
    return self;
}

Ответы [ 3 ]

3 голосов
/ 09 июня 2011

Ваша deactivateLabelToggle собственность с этим объявлением в ClassA:

@property(nonatomic, assign) BOOL deactivateLabelToggle;

, к которому вы обращаетесь в строке // <---- Error here, действительно не является ни массивом, ни указателем. Простые BOOL переменные не могут быть подписаны.

Если вы хотели сослаться на глобальный массив BOOL в вашем файле ClassA.m, вы не можете сделать это с помощью синтезированного свойства (и тип должен быть BOOL* вместо BOOL).

1 голос
/ 09 июня 2011

Ваша проблема в том, что у вас есть переменная экземпляра "_deactivateLabelToggle", которая имеет тип BOOL, и также глобальная переменная с тем же именем, которая является массивом BOOL.Кажется, вы думаете, что получите доступ к глобальной переменной, когда напишите classA.deactivateLabelToggle, но на самом деле вы обращаетесь к свойству, которое оборачивает переменную экземпляра.

0 голосов
/ 09 июня 2011

Вам не нужно (неатомное, присваивать) в BOOL.

...