wake-up-neo.com

Storyboard-Warnung: Prototyp-Tabellenzellen müssen über Wiederverwendungskennungen verfügen

Ich bekomme diese Warnung vom Storyboard - Prototyp-Tabellenzellen müssen Kennungen zur Wiederverwendung aufweisen.

Ich habe den Bezeichner im Attribut-Inspector umbenannt, die Warnung wurde jedoch scheinbar nicht entfernt. 

Irgendwelche Vorschläge?

110
K.Honda

Um die Warnung zu schließen, müssen Sie der Zellkennung einen Namen geben: 

enter image description here

149
aleroot

Eine andere Möglichkeit besteht darin, die Eigenschaft "Prototypzellen" der Tabellensicht im Attribut-Inspektor auf Null zu setzen, wenn Sie die Zelle programmgesteuert mit einer .xib definieren. 

 Setting prototype cells to 0 in Attributes Inspector

16
bitsand

Da das Storyboard tatsächlich eine XML-Datei ist, müssen Sie Ihr Storyboard mit einem beliebigen Texteditor (nicht mit Xcode!) Öffnen und versuchen, alle tableViewCell-Knoten zu finden. Drücken Sie beispielsweise CMD + F , geben Sie <tableViewCell contentMode="scaleToFill" ein und drücken Sie die Eingabetaste. Sie werden wahrscheinlich herausfinden, dass die Zeilen gleich sind: 

<tableViewCell contentMode="scaleToFill" selectionStyle="blue" accessoryType="disclosureIndicator" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="GenericCellID" id="kBr-Qn-Tki">

Bitte beachten Sie den reuseIdentifier="GenericCellID"-Schlüsselwert . Die Zeilen, in denen die Warnung (ohne Wiederverwendungskennungen) ausgelöst wird, haben keinen solchen Schlüsselwert. Schauen Sie sich die Knoten oben in Ihrem Texteditor an, und Sie sehen den tableViewController-Knoten mit dem Klassennamen, den Sie im Storyboard-Editor von Xcode überprüfen und entsprechend der Antwort von aleroot beheben müssen.

9
Dmitry Varavkin

Wenn Ihre Xcode-Warnung auch nach dem Einstellen des reuseIdentifier immer noch nicht angezeigt wird, versuchen Sie das Menü "Produkt -> Reinigen". Das hat mir geholfen und danach hat sich die Warnung nicht mehr gezeigt.

4
Marcel Wassmer

Ein Gruß von mir: Der Neustart von XCode funktionierte für mich (aber wahrscheinlich war nur ein manueller Neuaufbau erforderlich).

2
Hannele

Da ein Doppelklick auf diese Warnung zu einer wilden Verfolgungsjagd führen kann (die bestimmte UITableViewCell wird nicht ausgewählt), wollte ich nur hinzufügen, dass sich einige dieser Warnungen automatisch auflösen Einige werden nicht .

Wenn Sie sicher sind, dass Sie alle Zellen in Storyboard markiert haben, erstellen Sie das Projekt neu - Ihre Warnung verschwindet möglicherweise (wie meine).

2
Sitric

Stellen Sie sicher, dass Sie den Reuse Identifier für das Objekt und nicht die Restoration ID festlegen. Beide sind über das Storyboard verfügbar und leicht zu verwechseln.

In der Storyboard-XML-Datei müssen Sie reuseIdentifier und nicht restorationIdentifier einstellen.

1
pkamb

Ich habe diese Warnung für Xcode 7 erhalten. Ich arbeite mit Swift ..__ Ich habe den Navigationscontroller für den ursprünglichen View-Controller nicht hinzugefügt. Als ich das tat, bekam ich diese Warnung von StoryBoard. .__ Was ich getan habe ist:

  1. Es gibt zwei Bereiche
    1. vom Navigations-Controller zum Root-View-Controller und 
    2. vom Root-View-Controller zum ursprünglichen View-Controller. 
  2. Wählen Sie das Segment aus, das den Root-View-Controller mit dem Start-View-Controller verbindet.
  3. Benennen Sie den Bezeichner
  4. Wählen Sie den "Prototyp" -geschriebenen Teil des Controllers aus -> dort Sie sehen den Bezeichner als Option.
  5. Fügen Sie den gleichen Namen wie zuvor ein.

Die Warnung geht .. wenn nicht sdk rein :)

1
Mili

Ich habe festgestellt, dass dieser Fehler auftritt, wenn Sie mehrere Prototypzellen (in den Eigenschaften der Tabellenansicht) haben und nicht all von ihnen Bezeichner zur erneuten Verwendung angegeben haben.

0
Tjalsma

Der Bezeichner ist der Name, auf den Sie sich in Ihrer .m-Datei beziehen. Wenn es nicht gefüllt ist, kann die Zelle nicht referenziert werden.

0
Vincent

Dies zur Einstellung der Wiederverwendungskennung programmgesteuert

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath (NSIndexPath*)indexPath 
{
    static NSString *cellIdentifier = @"wot";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

    if (!cell)
        cell = [[UITableViewCell alloc] initWithStyle: someStyle reuseIdentifier: cellIdentifier];

    return cell;
}
0
Mukesh