Semnalizarea unei erori de la o metodă care returnează un NSArray

Am o problemă de arhitectură. Am o metodă care returnează un matrice pe baza datelor de pe un server.

NSArray *myStuff = [anObject getMyStuff];

Evident, serverul poate eșua. Care este cel mai bun mod de a satisface acest lucru? M-am uitat la modul în care performFetch: funcționează, dar are un BOOL ca tip de returnare. Pot sa am:

NSArray *myStuff = [anObject getMyStuff:&anError];
0
Denumiți metoda retrieveMyStuff: sau similar; get este un prefix rezervat. Da, returnarea nilului pentru a semnala o eroare și completarea parametrului de eroare este foarte bine (rețineți că ar trebui să faceți față faptului că anError ar putea fi NULL, semnalizând că apelantul nu este interesat deloc de eroare).
adăugat autor bbum, sursa

2 răspunsuri

Răspunsul scurt este: depinde de dvs. .

Unele dintre clasele de cacao folosesc obiectul simplu pointer-to-error pe care îl descrieți. Dacă încărcați date de pe un server, vă recomandăm să consultați un sistem de solicitare/răspuns mai complex care gestionează asincronă .

Alternativ, dacă căutați o soluție foarte simplă, întoarceți zero în cazul în care cererea nu reușește.

0
adăugat

Ar trebui, așa cum a sugerat e.James înainte, să faceți o manipulare asincronă corespunzătoare, unde obiectul, care efectuează preluarea, va apela o metodă, dacă ar fi reușită sau o altă, dacă nu a reușit. Există o variantă a acestui lucru, care este folosită în popularul AFNetworking : treceți două blocuri la metodă, unul pentru cazul nereușit, unul pentru cazul de succes

Ar putea arăta astfel:

[client shopsFeedForUserWithID:2 
                       success:^(id response) {
                           blockSelf.shops = [Shop shopsFromReponseDict:response];
                           [blockSelf.tableView reloadData];
                      } failure:^(NSError *error) {
                           //handle the error
                      }]; 
0
adăugat