Assertionsfehler in dequeueReusableCellWithIdentifier: forIndexPath:

324

Also machte ich einen RSS-Reader für meine Schule und beendete den Code. Ich habe den Test durchgeführt und es gab mir diesen Fehler. Hier ist der Code, auf den es sich bezieht:

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = 
     [tableView dequeueReusableCellWithIdentifier:CellIdentifier 
                                     forIndexPath:indexPath];
    if (cell == nil) {

        cell = 
         [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle  
                                reuseIdentifier:CellIdentifier];

    }

Hier ist der Fehler in der Ausgabe:

2012-10-04 20: 13: 05.356 Reader [4390: c07] * Assertionsfehler in - [UITableView dequeueReusableCellWithIdentifier: forIndexPath:], /SourceCache/UIKit_Sim/UIKit-2372/UITableView.m:4460 2012-10-04 20: 13: 05.357 Reader [4390: c07] * Beenden der App aufgrund einer nicht erfassten Ausnahme 'NSInternalInconsistencyException', Grund: 'Eine Zelle mit dem Bezeichner kann nicht aus der Warteschlange entfernt werden Zelle - muss eine Schreibfeder oder eine Klasse für den Bezeichner registrieren oder eine Prototypzelle in einem Storyboard verbinden ' * Ersten Wurf Call-Stack: (0x1c91012 0x10cee7e 0x1c90e78 0xb64f35 0xc7d14 0x39ff 0xd0f4b 0xd101f 0xb980b 0xca19b 0x6692d 0x10e26b0 0x228dfc0 0x228233c 0x228deaf 0x1058cd 0x4e1a6 0x4ccbf 0x4cbd9 0x4be34 0x4bc6e 0x4ca29 0x4f922 0xf9fec 0x46bc4 0x47311 0x2cf3 0x137b7 0x13da7 0x14fab 0x26315 0x2724b 0x18cf8 0x1becdf9 0x1becad0 0x1c06bf5 0x1c06962 0x1c37bb6 0x1c36f44 0x1c36e1b 0x147da 0x1665c 0x2a02 0x2935 ) libc ++ abi.dylib: Beenden Sie das Auslösen einer Ausnahme

und hier ist der Code, der im Fehlerbildschirm angezeigt wird:

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

bitte helfen!

Nick Scottman
quelle
Mögliches Duplikat von Assertion Failure in UITableViewController
Venk

Antworten:

488

Sie verwenden die dequeueReusableCellWithIdentifier:forIndexPath:Methode. In der Dokumentation zu dieser Methode heißt es:

Wichtig: Sie müssen eine Klassen- oder NIB-Datei mit der Methode registerNib:forCellReuseIdentifier:oder registrieren registerClass:forCellReuseIdentifier:, bevor Sie diese Methode aufrufen.

Sie haben keine Schreibfeder oder Klasse für die Wiederverwendungskennung registriert "Cell".

Wenn Sie sich Ihren Code ansehen, scheinen Sie zu erwarten, dass die Dequeue-Methode zurückkehrt, nilwenn sie keine Zelle enthält. Sie müssen Folgendes dequeueReusableCellWithIdentifier:für dieses Verhalten verwenden:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

Beachten Sie, dass dequeueReusableCellWithIdentifier:und dequeueReusableCellWithIdentifier:forIndexPath:verschiedene Methoden sind. Siehe doc für Ersteres und Letzteres .

Wenn Sie möchten , verstehen , warum Sie jemals verwenden wollen würde dequeueReusableCellWithIdentifier:forIndexPath:, lesen Sie in diesem Q & A .

Rob Mayoff
quelle
166
OH MEIN GOTT. Warum gibt Ihnen die Standardvorlage von Xcode für einen UITableViewController automatisch dequeueReusableCellWithIdentifier: forIndexPath:? So wenig hilfreich.
Spstanley
15
Das dequeueReusableCellWithIdentifer:forIndexPath:(in iOS6 eingeführt) ist eine nette Verbesserung, da Sie nicht überprüfen müssen, ob die Zelle Null ist. (Funktioniert also UITableViewControllerähnlich wie UICollectionView) Aber ja, ärgerlich, dass diese Änderung kein Kommentar in der Vorlage ist und dass die Assertion / Crash-Meldung nicht hilfreicher ist.
Jason Moore
2
Zumindest würden Sie denken, dass standardmäßig UITableViewCell verwendet wird, anstatt zu implodieren. Baka.
BadPirate
13
Die letzte Zeile dieser Antwort ist golden: Ich wurde mehr als einmal gebissen, dequeueReusableCellWithIdentifier:forIndexPath:indem ich verwendet habe , wann ich hätte verwenden sollen dequeueReusableCellWithIdentifier:.
ele
Diese Antwort ist perfekt. Ich habe eine Frage: Ich habe einen tableViewController als meinen anfänglichen View Controller. Bei didSelectRow ... schiebe ich einen anderen tableViewController auf den Navigationsstapel. Wie kommt es, dass ich nur eine Zelle für den zweiten tableViewController registrieren muss, nicht für den ersten?
ArielSD
137

Ich denke, bei diesem Fehler geht es darum, Ihre Feder oder Klasse für die Kennung zu registrieren.

Damit Sie behalten, was Sie in Ihrer tableView: cellForRowAtIndexPath-Funktion tun, und einfach den folgenden Code in Ihre viewDidLoad einfügen:

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];

Es hat bei mir funktioniert. Hoffe es kann helfen.


quelle
3
Ein kleines Problem dabei: Stellen Sie sicher, dass die Wiederverwendungskennung mit der übereinstimmt, die Sie in Ihren Storyboard-Einstellungen für die betreffende Zelle eingerichtet haben.
James Boutcher
Um dies in einem etwas anderen Anwendungsfall zu ergänzen, habe ich eine Zeile in der Master-Ansicht meines SplitViewControllers erneut ausgewählt. Diese Zeilenlogik zum erneuten Auswählen befand sich in der viewDidLoadund verschob diese Logik, um viewDidAppearsie zu beheben.
Craig Conover
Es konnte nicht in cell == nil eingegeben werden, also ist meine Tabellenansichtszelle immer nil.
Solid Soft
3
swift 3.0: self.tableView.register (UITableViewCell.classForCoder (), forCellReuseIdentifier: "Cell");
NorbDEV
68

Obwohl diese Frage ziemlich alt ist, gibt es eine andere Möglichkeit: Wenn Sie Storyboards verwenden, müssen Sie lediglich den CellIdentifier im Storyboard festlegen.

Wenn Ihr CellIdentifier also "Cell" ist, legen Sie einfach die Eigenschaft "Identifier" fest: Geben Sie hier die Bildbeschreibung ein

Stellen Sie sicher, dass Sie Ihren Build danach reinigen. XCode hat manchmal Probleme mit Storyboard-Updates

Sebastian Borggrewe
quelle
3
Du bist großartig, die Reinigung macht viel !! : D
Sandy
2
Hinweis - Wenn Sie einen anderen Bezeichner als "Cell" verwenden, müssen Sie auch Ihre cellForRowAtIndexPath-Methode ändern, um diesen Bezeichner in der folgenden Zeile zu verwenden: static NSString * CellIdentifier = @ "MyCellIdentifier";
Gamozzii
5
Eine wichtige Ergänzung dazu: In der Tabellenansicht muss das Attribut "Inhalt" auf "Dynamische Prototypen" und NICHT auf "Statische Zellen" gesetzt sein
Ted Avery
Diese Antwort muss höher kommen. Sehr hilfreich
Sukitha Udugamasooriya
Nach der Aktualisierung der IdentifierImmobilie war die Reinigung des Gebäudes unerlässlich . Vielen Dank!
Crashalot
59

Ich hatte das gleiche Problem mit zu ersetzen

static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

   if (cell==nil) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

    }

gelöst

Ich selbst
quelle
Vielen Dank. Das hat mir nur Kopfschmerzen erspart. =)
Robert
3
Tipp: Wenn Sie eine - (id) dequeueReusableCellWithIdentifier: forIndexPath: verwenden , müssen Sie nicht überprüfen, ob die Zelle Null ist. (IOS6>)
Seufagner
Ich habe mir nur Kopfschmerzen erspart. =)
Abo3atef
26

Das Problem ist höchstwahrscheinlich darauf zurückzuführen, dass Sie benutzerdefinierte Einstellungen UITableViewCellim Storyboard vornehmen, das Storyboard jedoch nicht zum Instanziieren des Storyboards verwenden, das UITableViewControllerdies verwendet UITableViewCell. Zum Beispiel in MainStoryboard, haben Sie eine UITableViewControllerUnterklasse genannt MyTableViewControllerund haben eine dynamische benutzerdefinierte UITableViewCellgenannt MyTableViewCellmit der Kennung id „MyCell“.

Wenn Sie Ihre benutzerdefinierte UITableViewControllerwie folgt erstellen :

 MyTableViewController *myTableViewController = [[MyTableViewController alloc] init];

Ihre benutzerdefinierte Tabellenansichtszelle wird nicht automatisch für Sie registriert. Sie müssen es manuell registrieren.

Wenn Sie jedoch das Storyboard zum Instanziieren verwenden MyTableViewController, gehen Sie wie folgt vor:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
MyTableViewController *myTableViewController = [storyboard  instantiateViewControllerWithIdentifier:@"MyTableViewController"];

Schöne Sache passiert! UITableViewControllerregistriert automatisch Ihre benutzerdefinierte Tabellenansichtszelle, die Sie im Storyboard für Sie definiert haben.

In Ihrer Delegatmethode "cellForRowAtIndexPath" können Sie Ihre Tabellenansichtszelle wie folgt erstellen:

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

//Configure your cell here ...

return cell;
}

dequeueReusableCellWithIdentifier erstellt automatisch eine neue Zelle für Sie, wenn in der Recycling-Warteschlange keine wiederverwendbare Zelle verfügbar ist.

Dann bist du fertig!

James Wang
quelle
Der Tipp, mit instantiateViewControllerWithIdentifierdem ich meinen viewController initiiert habe, hat mir den Tag gerettet!
Lei Zhang
rettete meinen Tag: Prototypzellen waren im benachbarten VC mit einem Tisch
Anton Tropashko
Dies ist in meinem Fall die vernünftige Ursache.
Nora Alnashwan
19

Ich füge nur hinzu, dass Xcode 4.5 das Neue dequeueReusableCellWithIdentifier:forIndexPath:
in seinen Standardvorlagencode einbezieht - ein potenzielles Problem für Entwickler, die die ältere dequeueReusableCellWithIdentifier:Methode erwarten .

Brian Shriver
quelle
Hat mich gestochen! Jetzt werde ich es besser wissen. ;)
spstanley
18

In Ihrem Storyboard sollten Sie den 'Identifier' Ihrer Prototypzelle so einstellen, dass er mit Ihrem CellReuseIdentifier "Cell" übereinstimmt. Dann erhalten Sie diese Nachricht nicht oder müssen diese registerClass: -Funktion aufrufen.

Steven
quelle
2
Erwischt! Wo ist der '100 Upvotes'-Button? Dies ist die wirkliche Lösung.
Jojo.Lechelt
Sie würden denken, dass das Hinzufügen einer neuen tableView zu einem Storyboard eine Standardkennung liefert - "Zelle" für Sie. Es wird so leicht übersehen, besonders wenn Sie den sogenannten "freien Code" in tableView verwenden: cellForRowAtIndexPath!
Uschika
18

Swift 2.0-Lösung:

Sie müssen in Ihren Attributinspektor gehen und einen Namen für Ihre Zellen-ID hinzufügen:

Geben Sie hier die Bildbeschreibung ein

Dann müssen Sie Ihre Kennung wie folgt mit Ihrer Warteschlange abgleichen:

let cell2 = tableView.dequeueReusableCellWithIdentifier("ButtonCell", forIndexPath: indexPath) as! ButtonCell

Alternative

Wenn Sie mit einer Schreibfeder arbeiten, müssen Sie möglicherweise Ihre Klasse in Ihrem cellForRowAtIndexPath registrieren:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {       

    tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "SwitchCell")

    // included for context            
    let cell = tableView.dequeueReusableCellWithIdentifier("SwitchCell", forIndexPath:indexPath) as! SwitchCell

    //... continue    
}

In der UITableView-Klassenreferenz von Apples heißt es:

Rufen Sie diese Methode oder die Methode registerNib: forCellReuseIdentifier: auf, bevor Sie Zellen aus der Warteschlange entfernen, um der Tabellenansicht mitzuteilen, wie neue Zellen erstellt werden sollen. Befindet sich eine Zelle des angegebenen Typs derzeit nicht in einer Wiederverwendungswarteschlange, erstellt die Tabellenansicht anhand der bereitgestellten Informationen automatisch ein neues Zellenobjekt.

Wenn Sie zuvor eine Klassen- oder NIB-Datei mit derselben Wiederverwendungskennung registriert haben, ersetzt die im Parameter cellClass angegebene Klasse den alten Eintrag. Sie können nil für cellClass angeben, wenn Sie die Registrierung der Klasse von der angegebenen Wiederverwendungskennung aufheben möchten.

Hier ist der Code aus dem Apples Swift 2.0-Framework:

// Beginning in iOS 6, clients can register a nib or class for each cell.
// If all reuse identifiers are registered, use the newer -dequeueReusableCellWithIdentifier:forIndexPath: to guarantee that a cell instance is returned.
// Instances returned from the new dequeue method will also be properly sized when they are returned.

@available(iOS 5.0, *)
func registerNib(nib: UINib?, forCellReuseIdentifier identifier: String)

@available(iOS 6.0, *)
func registerClass(cellClass: AnyClass?, forCellReuseIdentifier identifier: String)
Dan Beaulieu
quelle
Ich verstehe nicht, woher SwitchCell.selfkommt?
Gert Cuykens
@GertCuykens SwitchCell ist meine benutzerdefinierte UITableViewCell
Dan Beaulieu
1
Ich bin gerade nicht auf meinem Mac, kann ihn aber definitiv aktualisieren, wenn ich nach Hause komme.
Dan Beaulieu
1
Das Ersetzen durch UITableViewCell.selfscheint für mich zu funktionieren. Vielleicht eine Notiz in die Antwort hinzufügen
Gert Cuykens
@GertCuykens danke für den Hinweis, ich habe SwitchCell.self für UITableViewCell.self geändert
Dan Beaulieu
3

Wenn Sie mit benutzerdefinierten statischen Zellen arbeiten, kommentieren Sie einfach diese Methode:

//- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
//    static NSString *CellIdentifier = @"notificationCell";
//    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
//    return cell;
//}

und geben Sie den Zellen eine Kennung bei "Attributes Inspector" im Storyboard.

Francisco Gutiérrez
quelle
3

Ich gebe Ihnen die Antwort sowohl in Ziel C als auch in Swift. Vorher möchte ich sagen

Wenn wir die verwenden dequeueReusableCellWithIdentifier:forIndexPath:, müssen wir eine Klassen- oder NIB-Datei mit der Methode registerNib: forCellReuseIdentifier: oder registerClass: forCellReuseIdentifier: registrieren, bevor wir diese Methode als Apple Documnetation Says aufrufen

Also fügen wir hinzu registerNib:forCellReuseIdentifier: or registerClass:forCellReuseIdentifier:

Sobald wir eine Klasse für den angegebenen Bezeichner registriert haben und eine neue Zelle erstellt werden muss, initialisiert diese Methode die Zelle durch Aufrufen ihrer Methode initWithStyle: reuseIdentifier :. Bei nib-basierten Zellen lädt diese Methode das Zellenobjekt aus der bereitgestellten nib-Datei. Wenn eine vorhandene Zelle zur Wiederverwendung verfügbar war, ruft diese Methode stattdessen die prepareForReuse-Methode der Zelle auf.

In der viewDidLoad-Methode sollten wir die Zelle registrieren

Ziel c

OPTION 1:

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];

OPTION 2:

[self.tableView registerNib:[UINib nibWithNibName:@"CustomCell" bundle:nil] forCellReuseIdentifier:@"cell"];

nibWithNibName:@"CustomCell"Geben Sie im obigen Code Ihren Federnamen anstelle meines Spitznamens CustomCell an

SCHNELL

OPTION 1:

tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")

OPTION 2:

tableView.registerNib(UINib(nibName: "NameInput", bundle: nil), forCellReuseIdentifier: "Cell") 

nibName:"NameInput"Geben Sie im obigen Code Ihren Federnamen an

user3182143
quelle
3

Arbeiten mit Swift 3.0:

override func viewDidLoad() {
super.viewDidLoad()

self.myList.register(UINib(nibName: "MyTableViewCell", bundle: nil), forCellReuseIdentifier: "Cell")
}



public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = myList.dequeueReusableCell(withIdentifier: "Cell", for: indexPath as IndexPath) as! MyTableViewCell

return cell
}
norbDEV
quelle
2

Ich habe letzte Nacht Stunden damit verbracht herauszufinden, warum meine programmgesteuert generierte Tabelle auf [myTable setDataSource: self] abgestürzt ist. Es war in Ordnung, eine leere Tabelle zu kommentieren und aufzutauchen, stürzte jedoch jedes Mal ab, wenn ich versuchte, die Datenquelle zu erreichen.

Ich hatte die Delegierung in der h-Datei eingerichtet: @interface myViewController: UIViewController

Ich hatte den Datenquellcode in meiner Implementierung und stürzte immer noch jedes Mal ab! DANKE an "xxd" (Nr. 9): Das Hinzufügen dieser Codezeile hat es für mich gelöst! Tatsächlich starte ich eine Tabelle über eine IBAction-Schaltfläche. Hier ist mein vollständiger Code:

    - (IBAction)tapButton:(id)sender {

    UIViewController* popoverContent = [[UIViewController alloc]init];

    UIView* popoverView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 300)];
    popoverView.backgroundColor = [UIColor greenColor];
    popoverContent.view = popoverView;

    //Add the table
    UITableView *table = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 200, 300)         style:UITableViewStylePlain];

   // NEXT THE LINE THAT SAVED MY SANITY Without it the program built OK, but crashed when      tapping the button!

    [table registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
    table.delegate=self;
    [table setDataSource:self];
    [popoverView addSubview:table];
    popoverContent.contentSizeForViewInPopover =
    CGSizeMake(200, 300);

    //create a popover controller
    popoverController3 = [[UIPopoverController alloc]
                          initWithContentViewController:popoverContent];
    CGRect popRect = CGRectMake(self.tapButton.frame.origin.x,
                                self.tapButton.frame.origin.y,
                                self.tapButton.frame.size.width,
                                self.tapButton.frame.size.height);


    [popoverController3 presentPopoverFromRect:popRect inView:self.view   permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];



   }


   #Table view data source in same m file

   - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
   {
    NSLog(@"Sections in table");
    // Return the number of sections.
    return 1;
   }

   - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
  {
    NSLog(@"Rows in table");

    // Return the number of rows in the section.
    return myArray.count;
   }

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

    NSString *myValue;

    //This is just some test array I created:
    myValue=[myArray objectAtIndex:indexPath.row];

    cell.textLabel.text=myValue;
    UIFont *myFont = [ UIFont fontWithName: @"Arial" size: 12.0 ];
    cell.textLabel.font  = myFont;

    return cell;
   }

Übrigens: Die Schaltfläche muss als IBAction und als IBOutlet verknüpft sein, wenn Sie das Popover daran verankern möchten.

UIPopoverController * popoverController3 wird in der H-Datei direkt nach @interface zwischen {} deklariert

Simone
quelle
2

FWIW, ich habe den gleichen Fehler erhalten, als ich vergessen habe, die Zellenkennung im Storyboard festzulegen. Wenn dies Ihr Problem ist, klicken Sie im Storyboard auf die Tabellenansichtszelle und legen Sie die Zellenkennung im Attributeditor fest. Stellen Sie sicher, dass die hier festgelegte Zellenkennung mit der übereinstimmt

static NSString *CellIdentifier = @"YourCellIdenifier";
Honkskillet
quelle
2

Ich hatte das gleiche Problem, hatte den gleichen Fehler und für mich funktionierte es so:

[self.tableView registerNib:[UINib nibWithNibName:CELL_NIB_HERE bundle: nil] forCellReuseIdentifier:CELL_IDENTIFIER_HERE];

Vielleicht ist es für jemand anderen nützlich.

CarmenA
quelle
2

Ich habe alles im Storyboard korrekt eingerichtet und einen sauberen Build durchgeführt, aber immer wieder die Fehlermeldung "Ich muss eine Schreibfeder oder eine Klasse für die Kennung registrieren oder eine Prototypzelle in einem Storyboard verbinden " erhalten.

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];

Der Fehler wurde behoben, aber ich bin immer noch ratlos. Ich verwende keine 'benutzerdefinierte Zelle', sondern nur eine Ansicht mit einer eingebetteten Tabellenansicht. Ich habe den Viewcontroller als Delegat und Datenquelle deklariert und sichergestellt, dass die Zellenkennung in der Datei übereinstimmt. was ist denn hier los?

FrostyL
quelle
1

Das mag manchen Leuten dumm erscheinen, aber es hat mich erwischt. Ich habe diesen Fehler erhalten und das Problem für mich war, dass ich versucht habe, statische Zellen zu verwenden, aber dann dynamisch mehr Material hinzugefügt habe. Wenn Sie diese Methode aufrufen, müssen Ihre Zellen dynamische Prototypen sein. Wählen Sie die Zelle im Storyboard aus und im Attributinspektor wird als erstes "Inhalt" angezeigt. Wählen Sie dynamische Prototypen aus, die nicht statisch sind.

Chase Roberts
quelle
VIELEN DANK! Das war genau mein Problem.
Jesaja Turner
1

Nur eine Ergänzung der Antworten: Es kann eine Zeit geben, in der Sie alles richtig eingestellt haben, aber Sie können versehentlich einige andere Benutzeroberflächen in sich hinzufügen .xib, wie z. B UIButton.: Geben Sie hier die Bildbeschreibung ein Löschen Sie einfach die zusätzliche Benutzeroberfläche, es funktioniert.

DrustZ
quelle
1

Stellen Sie sicher, dass der CellIdentifier == Bezeichner der Zelle in einem Storyboard beide Namen gleich sind. Hoffe das funktioniert für dich

Ankit garg
quelle
0

In meinem Fall passierte der Absturz, als ich anriefdeselectRowAtIndexPath:

Die Linie war [tableView deselectRowAtIndexPath:indexPath animated:YES];

Ändern Sie es in [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; FIXED MY PROBLEM!

Hoffe das hilft jedem

Offek
quelle
0

In Swift kann dieses Problem gelöst werden, indem Sie den folgenden Code in Ihre hinzufügen

viewDidLoad

Methode.

tableView.registerClass(UITableViewCell.classForKeyedArchiver(), forCellReuseIdentifier: "your_reuse_identifier")
arango_86
quelle
-1

Der Fehler bei der Wiederverwendung von Zellen ist falsch - ein Anfängerfehler, aber es passiert: 1. Vergewissert sich, dass der Identifikator für die Wiederverwendung von Zellen keine Rechtschreibfehler oder fehlenden Buchstaben enthält. 2. Vergessen Sie in diesem Sinne nicht, dass die Großschreibung zählt. 3. Nullen sind keine "O" (Ohs)

John Pitts
quelle