Zpracování chyb Objective C v průběhu bez odezvy

hlasů
0

V mé aplikaci jsem se použít následující metody Pro přidání / získání dat ze vzdáleného serveru.

     postData = [self sendSynchronousRequest:request returningResponse:&response error:&error];

    - (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error
{

    NSError __block *err = NULL;
    NSData __block *data;
    BOOL __block reqProcessed = false;
    NSURLResponse __block *resp;

    [[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable _data, NSURLResponse * _Nullable _response, NSError * _Nullable _error) {
        resp = _response;
        err = _error;
        data = _data;
        reqProcessed = true;
    }] resume];

    while (!reqProcessed) {
        [NSThread sleepForTimeInterval:0];
    }

*response = resp;
*error = err;
return data;

}

Mám základní zpracování chyb pro žádné připojení k síti, a app směruje uživatele na žádné připojení k síti viewController. Ale já bych chtěl vysvětlit situaci, kdy například server dolů nebo datový formát API změnilo, jen přemýšlel, jak bych zachytit takové chyby a zabránit aplikaci z shazovat.

Položena 20/10/2018 v 12:55
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

Pár obecných bodů:

  • Nedělají žádosti synchronně. Projít v bloku s kódem, který by měl běžet, když je požadavek dokončí. Neexistuje žádný důvod, aby přivázat vlákno čeká na dokončení psovoda ke spuštění, a to je ještě horší, pokud že vlákno je v podstatě nepřetržitě běží jako vy je.
  • Máte-li naprosto nutné dělat (proč?), Alespoň používat semafor a čekat na semaforu. Tímto způsobem si nejste pálení jádro procesoru neustále na počkání.

Způsob, jakým zabránit padání, je zdravý rozum zkontrolovat údaje, které se vrátím, např

  • Zkontrolujte délku dat a ujistěte se, že jste nedostal dat nil / prázdnou odpověď.
  • Za předpokladu, že server odešle odpověď JSON, zabalit NSJSONSerialization rozebrat v @try bloku, a pokud to selže nebo výjimku, chybu zpracovat nějakým užitečným způsobem.
  • Obecně lze předpokládat, že všechna data jsou neplatná, dokud se neprokáže opak. Zkontrolujte, zda jsou data smysl.
  • Pokud jste na starosti straně serveru, zvažte předáním verzi API jako argument, a jak změnit věci v budoucnu, ujistěte se, že nekompatibilní změnám dochází pouze tehdy, když reaguje na klienty, kteří žádají o novější verzi API (nebo alternativně , odeslat odpověď, který říká klienta, že potřebuje být aktualizován, a pak odmítnout poskytnutí údajů).
Odpovězeno 22/10/2018 v 02:13
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more