2016-05-03 7 views
-1

Ich Unterklasse UITableViewCell und PureLayout verwenden, um Einschränkungen anzuwenden, aber die App wird mit dem Fehler "PureLayout ist nicht threadsicher beendet, und muss ausschließlich aus dem Hauptthread verwendet werden".PureLayout ist nicht threadsafe

In der Funktion ...

initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 

Ich habe angewendet nur eine Einschränkung

[self.label autoSetDimension:ALDimensionHeight toSize:50]; 

Wenn diese entfernt wird, die App nicht

Update nicht abstürzen --- Es ist wahrscheinlich, weil ich eine API asynchron anrufe

Antwort

1

Wrap Ihr Init Anruf in einer dispatch_async zum Haupt-Thread dann ...

Ohne den Rest Ihres Codes zu sehen.

dispatch_async(dispatch_get_main_queue(), ^{ 

     UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Something"]; 

    }); 

Aber wenn Sie dies tun müssen, vermute ich, dass Sie über die Dinge in die falsche Richtung gehen. Was Sie tun sollten, ist die Aktualisierung der Daten mit dem Ergebnis Ihres asynchronen Aufrufs und dem Aufruf von reloadData in der Tabellenansicht. wie

Etwas ...

[SomeAPI loadSomeRemoteDataPleaseWithCompetion:^(NSArray *theNewData){ 

     self.dataArray = theNewData; 
     //oh hai im a bad API and dont return in main thread 
     dispatch_async(dispatch_get_main_queue(), ^{ 

      [self.tableview reloadData]; 

     }); 

    }]; 
+0

wow O_O du bist ein Genie. Ich habe die zweite Option gewählt und es funktioniert. Entschuldigung unerfahrene af – abcf