Подтвердить что ты не робот

Как назначить значение указателю BOOL в Objective-C?

У меня есть путаница в том, как назначить значение указателю 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').

Буду признателен за это, так как я nubski.


UPDATE

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

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

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

@property BOOL initialBroadcast;

//  In .m
@synthesize initialBroadcast;

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

4b9b3361

Ответ 1

Вам нужно сказать

*initialBroadcast = YES;

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

Ответ 2

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

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

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

Ответ 3

Изменить -

initialBroadcast = YES;

к

(*initialBroadcast) = YES;

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

Ответ 4

Может быть, вы должны написать

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

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