Ошибки iBeacon: настройка основного и дополнительного идентификаторов

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

self.majorLabel.text = [NSString stringWithFormat:@"%@", beacon.major];
    self.minorLabel.text = [NSString stringWithFormat:@"%@", beacon.minor];
    self.accuracyLabel.text = [NSString stringWithFormat:@"%f", beacon.accuracy];
    if (([beacon.minor] == 1) && ([beacon.major] == 2) && (beacon.proximity == CLProximityFar)) {
        self.distanceLabel.text = @"Good Bye";
        self.distanceLabel.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@""]];

Есть ли что-то, что я делаю неправильно здесь??


person Hugh Mbaezue    schedule 08.01.2014    source источник
comment
Я бы очень хотел увидеть вырезку и вставку фактического сообщения об ошибке, но это может быть случай смешивания синтаксиса точки (.) и сообщения (stackoverflow.com/questions/7847122/). Поэтому попробуйте вместо этого [beacon minor] == 1 или beacon.minor == 1.   -  person Robotic Cat    schedule 08.01.2014
comment
Хорошо, вот что говорит ошибка, если (([[beacon.minor] : ожидаемый идентификатор integerValue] == 1) && ([[beacon.major] : ожидаемый идентификатор integerValue] == 2) && (beacon.proximity == CLProximityFar )) { self.distanceLabel.text = @До свидания; self.distanceLabel.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@]];   -  person Hugh Mbaezue    schedule 08.01.2014
comment
IityFar))t говорит, что сразу после оператора if. Я устанавливаю основное и дополнительное значение как self.majorLabel.text = [NSString stringWithFormat:@%@, beacon.major]; self.minorLabel.text = [NSString stringWithFormat:@%@, beacon.minor];   -  person Hugh Mbaezue    schedule 08.01.2014
comment
1. Пожалуйста, добавьте правильно отформатированную ошибку в свой вопрос (помогает всем) и 2. Вы пробовали мое предложение относительно смешивания синтаксиса свойств и методов (т.е. удалить квадратные скобки вокруг beacon.minor и beacon.major)?   -  person Robotic Cat    schedule 08.01.2014
comment
Спасибо! Ваше предложение сработало. Я удалил квадратные скобки вокруг beacon.minor и beacon.major, и это сработало как шарм!! Спасибо еще раз   -  person Hugh Mbaezue    schedule 09.01.2014
comment
Я добавлю это как ответ.   -  person Robotic Cat    schedule 09.01.2014


Ответы (2)


Какая строка выдает ошибку и каков точный текст ошибки? Я предполагаю, что это оператор if, так как это единственная строка вашего кода, которая включает младшие и основные значения маяка.

Что такое переменная "маяк"? Это типа CLBeacon? Я бы так предположил.

Основные и дополнительные свойства объекта CLBeacon (а также объекта CLBeaconRegion) — это NSNumbers, а не целые числа. Таким образом, ваш оператор if должен читать

if (([[beacon.minor] integerValue] == 1) && 
   ([[beacon.major] integerValue] == 2) && 
   (beacon.proximity == CLProximityFar)) 
{
}
person Duncan C    schedule 08.01.2014
comment
Спасибо, Дункан, да, свойство value — это CLBeacon. Я обновил код до того, что вы предложили, и все еще получаю ту же ошибку. прямо по этому коду - person Hugh Mbaezue; 08.01.2014
comment
Не знаю. Отредактируйте свой вопрос и опубликуйте весь метод, а также соответствующие разделы файла .h, в которых объявляются используемые вами переменные экземпляра. Также сделайте скриншот ошибки компилятора и опубликуйте его. Он должен поставить знак вставки прямо на той части строки, которая вызывает ошибку. - person Duncan C; 08.01.2014
comment
Спасибо Это решилось. Я называл их целыми числами вместо NSNumber. Как только я изменил это и исправил синтаксис, все заработало! Спасибо! - person Hugh Mbaezue; 09.01.2014
comment
@ Хью Мбаезуэ, разве я не это сказал? - person Duncan C; 09.01.2014

Судя по вашему сообщению об ошибке: Expected identifier, вы смешиваете синтаксис точки свойства (.) и сообщения.

Измените свой код:

if (([beacon.minor] == 1) && ([beacon.major] == 2) && (beacon.proximity == CLProximityFar)) { ... }

к любому синтаксису свойства (.) (удалив квадратные скобки []):

if ((beacon.minor == 1) && (beacon.major == 2) && (beacon.proximity == CLProximityFar)) { ... }

или синтаксис метода (удаление .):

if (([beacon minor] == 1) && ([beacon major] == 2) && (beacon.proximity == CLProximityFar)) { ... }

person Robotic Cat    schedule 08.01.2014