Как присвоить значение указателю BOOL в Objective-C? - PullRequest
36 голосов
/ 19 марта 2011

У меня немного путаница в том, как присвоить значение указателю BOOL?Вот мой код:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    self.latitude.text = [NSString stringWithFormat:@"%f", newLocation.coordinate.latitude];
    self.longitude.text = [NSString stringWithFormat:@"%f", newLocation.coordinate.longitude];

    if (!initialBroadcast) {
        initialBroadcast = YES; // Where I'm having troubles

        [broadcastTimer fire];
    };
}

Компилятор постоянно говорит мне следующее: Incompatible integer to pointer conversion assigning to 'BOOL *' (aka 'signed char *') from 'BOOL' (aka 'signed char').

Буду признателен за разъяснение этого, так как я нубский.

ОБНОВЛЕНИЕ

Как многие из вас указали, я, очевидно, злоупотребляю объявлением BOOL, используя для него указатель.Честно говоря, я не знаю, почему я использовал его, но, поскольку я новичок в Objective-C, он, должно быть, сработал для того, что я делал, поэтому застрял.

Во всяком случае, с тех пор я изменилобъявление:

//  In .h
@interface ... {
    BOOL initialBroadcast;
}

@property BOOL initialBroadcast;

//  In .m
@synthesize initialBroadcast;

Итак, я сейчас на правильном пути?

Ответы [ 4 ]

60 голосов
/ 19 марта 2011

Вы должны сказать,

*initialBroadcast = YES;

initialBroadcast - это указатель или адрес памяти.Знак * дает доступ к значению по адресу памяти, который содержит указатель.Таким образом, initialBroadcast является адресом памяти, но * initialBroadcast является логическим значением или символом.

59 голосов
/ 19 марта 2011

Проблема не в назначении, скорее всего, вы объявили переменную вашего экземпляра равной BOOL *initialBroadcast;.

Нет причин объявлять переменную экземпляра указателем (по крайней мере, если нет необходимости, если вам действительно нужен массив C BOOL). Удалите * из объявления.

Кроме того, это исправит ваш текущий неверный тест if (). На самом деле, он проверяет, установлен ли указатель, а не значение.

8 голосов
/ 19 марта 2011

Изменение -

initialBroadcast = YES;

до

(*initialBroadcast) = YES;

Поскольку вы присваиваете значение местоположению, на которое указывает указатель (при условии, что оно инициализировано), initialBroadCast должно быть разыменованным первым.

3 голосов
/ 19 марта 2011

Возможно, вам следует написать

*initialBroadcast = YES; // Where I'm having troubles

Строка, представленная ранее, кажется стандартной проверкой, чтобы убедиться, что указатель действителен (не ноль)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...