Я пытаюсь понять, как использовать блоки в iOS. Я читал документы Apple, но, как обычно, они расплывчаты и неполны, и несколько существенных бит информации не упоминаются. Я тоже без искажений googled. Это то, что я пытаюсь понять как упражнение, чтобы понять это.
Я создал блок для чтения строки и сравнивает строку с предыдущим чтением. Если строки не совпадают, верните YES, если они совпадают, верните NO.
Вот как я это сделал:
Я объявил это на .h
BOOL (^differentStrings)(void);
Я объявил это на .m, внутри viewDidLoad в viewController
__block NSString * previousString;
__block NSString * currentString;
differentStrings = ^(void){
currentString = [self getString];
NSLog(@"%@", currentString); // not printing anything on console
if (![currentString isEqualToString:previousString]) {
previousString = currentString;
return YES;
} else {
return NO;
}
};
Вот как я использую: у меня есть поток, который делает это:
if (differentStrings)
NSLog (@"strings are different);
Это проблемы, которые у меня есть:
- блок всегда возвращает ДА (строки разные)
- Мне неудобно объявлять об этом внутри videDidLoad. Как мне объявить это, поэтому я могу использовать его глобально как метод? Должен ли я поместить это, как я бы, с помощью метода?
- Я вызываю метод "getString" внутри блока. Все в порядке?
- Мне кажется странным объявлять блок-переменные на .m. Как я вижу, я должен объявить блок-переменные на .h, а затем просто использовать их на .m. Я попытался это сделать, но получил сообщение об ошибке.
- Я установил точку отладки в первой строке блока, но она не останавливается там;
- Строка NSlog внутри блока ничего не печатает. Не называется ли блок?
Можете ли вы, ребята, помочь мне с этим?