• Какие есть способы получения данных из global queue помимо Notification center?

    Flanker_4
    @Flanker_4
    Обычно для асинхронных задач используют блоки
    - (void)getData:(void(^)(id result))completionBlock {
        NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@""]];
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
            if (error) {
                NSLog(@"%@", error.description);
            } else {
                NSError *parsingError;
                NSDictionary *parsedData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&parsingError];
                if (parsingError) {
                        NSLog(@"Error while parsing data %@", parsingError.description);
                } else {
                    dispatch_async(dispatch_get_main_queue(), ^{
                        if (completionBlock){
                           completionBlock(parsedData);
                       }
                    });
                }
            }
        }];
        [task resume];
    }

    Вызов выглядит так
    [self getData:^(id result){
        //process
    }];

    Да Вы, собственно, и сами пользуетесь этим способом в NSURLSession. Дабы избежать калбек хелла можно посмотреть в сторону PromiseKit

    Еще один, уже почти забытый способ, через делегаты...
    Ответ написан
    2 комментария
  • Как получить индекс нажатой accessory button?

    Flanker_4
    @Flanker_4
    Я не совсем понимаю, что Вы делаете. В идеале, прикреплять к вопросу проект-пример с демонстрацией проблемы

    Но Вам должно помочь следующее - в методе
    - (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{}

    "Сохранить" indexPath и вручную вызвать
    [self performSegueWithIdentifier:@"SEGUE_ID" sender:self]; //*

    *Это только если делегат UITableView является UIViewController, а у Вас наверняка так)
    Ну и конечно же, нужно убрать предыдущий performSegue, явный , или тот что вы цепляли в InterfaceBuilder'e
    Ответ написан
    1 комментарий
  • Как обновить ViewController используя viewDidLoad?

    ManWithBear
    @ManWithBear
    Swift Adept, Prague
    У вас каша в голове. viedDidLoad вызывается у контролера, когда его вьюшка полностью загружена. Зачастую, это происходит вообще один раз за время жизни контроллера.
    В вашем случае вам нужен отдельный метод, который будет загружать данные из базы, и отправлять таблице [_table reloadData];

    UPD Советую хорошенько прочитать и разобраться с этой статьей ---> КЛИК!
    Ответ написан
    1 комментарий
  • Как добавить условие "или" в регулярное выражение?

    aen
    @aen
    Keep calm and 'use strict';
    ^([a-zA-Z ,.'-]|\s)*$
    Ответ написан
    Комментировать
  • Чем отличаются weak и strong?

    morozovdenis
    @morozovdenis
    strong - сильная ссылка и при присваивании в проперти с strong-ом колво ссылок на объект увеличивается

    weak - слабая ссылка и при присваивании в проперти с weak-ом колво ссылок на объект НЕ увеличивается, а когда объект удаляетс, то этому проперти присваивается nil

    пример:
    @property (strong, nonatomic) NSObject *a;
    @property (weak, nonatomic) NSObject *b;
    
    NSObject *_a = [NSObject new]; // retainCount == 1
    self.a = _a; //retainCount == 2
    _a = nil; // объект ещё не удалён , retainCount == 1
    self.a = nil; // объект будет удален
    
    NSObject *_b = [NSObject new]; // retainCount == 1
    self.b = _b; // retainCount == 1
    _b = nil; //  объект будет удален, а в self.b будет nil
    Ответ написан
    3 комментария