Ich habe meinen Hauptansicht-Controller, der eine UITableView
zeigt. Jede Zelle davon ist benutzerdefiniert (Ich habe eine UIView
für benutzerdefinierte Präsentation erstellt).Objective c - Einige Array-Elemente werden in meinem UITableView nicht angezeigt (einige werden zweimal angezeigt)
Für diese Elemente in meinem Tableview zeigt, besiedeln ich einen Array mit dem Inhalt der „allFilesFolderPath“ Ordner mit diesem Code:
- (void)configureView {
_itemArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:allFilesFolderPath error:nil];
}
und
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [self.itemArray count];
}
und ich meine benutzerdefinierten Zellen erstellen um sie anzuzeigen mit:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSUInteger row = [indexPath row];
myItem = [self.itemArray objectAtIndex:row];
NSLog(@"My Item : %@", _itemArray.description);
static NSString *CellIdentifer = @"cardCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifer];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifer];
}
return cell;
}
Wenn ich das Array mit derdrucken, erhalte ich die richtige Liste von Elemente und in der alphabetischen Reihenfolge (wie, wie sie in den Dokumenten Lage auf meinem iPhone gespeichert sind):
My Item : (
Music,
Music10,
Music2,
Music3,
Music4,
Music5,
Music6,
Music7,
Music8,
Music9,
Photos,
Videos
)
Aber wenn ich laufe die App in meinem iPhone (oder im Simulator), werden die Zellen korrekt (in der Reihenfolge) bis zum achten Punkt angezeigt. Nach dieser Nummer, in meinem Fall, anstatt "Music8", "Music9", "Photos", "Video" zu haben, komme ich zurück zum Anfang des Arrays, also "Music", "Music10", "Music2" und "Music3 "
Um besser zu verstehen, was ich bekommen, ist hier die Screenshots:
ich wirklich bin verloren! Ich habe gesucht (und suche wieder), was ich falsch mache, aber ich finde nichts, alles ist richtig für mich.
Bitte helfen Sie mir, mein Problem zu finden, so dass ich normal schlafen kann.
EDIT: Hier ist die Methode, die ich gesetzt habe die myItem Zeichenfolge aus meiner anderen Klasse abzurufen:
+ (NSString *)getItemName {
return myItem;
}
Und hier ist, wie ich es von meinen anderen Klasse abrufen:
NSString *test = [ViewController getItemName];
_itemName.text = test;
EDIT2: Hier ist der verwendete Code für die Einstellung meiner benutzerdefinierten TableViewCell (sorry für fehlende diesen Informationen
#import "TableViewCell.h"
@implementation TableViewCell
- (void)awakeFromNib {
// Initialization code
[self cardSetup];
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
- (void)cardSetup {
_cardView.layer.masksToBounds = NO;
_cardView.layer.shadowOffset = CGSizeMake(0, 1);
_cardView.layer.shadowRadius = 1;
_cardView.layer.shadowOpacity = 0.3;
NSString *test = [ViewController getItemName];
_itemName.text = test;
}
@end
Ich habe nicht daran gedacht, eine Klasse zu verwenden, um Daten zu speichern, und ich denke nicht Warum, wie es ein sauberes Modell ist! Ich werde das morgen versuchen, weil es spät ist, wo ich lebe, und Sie wissen lassen. Vielen Dank ! – Synny
Also habe ich mein Datenmodell mit Hilfe von ray wenderlich tuto erstellt (https://www.raywenderlich.com/1797/ios-tutorial-how-to-create-a-simple-iphone-app-part-1). Ich habe eine Doc- und eine Data-Klasse festgelegt, die meinen Titel enthalten. Ich habe erfolgreich mein TableViewCellDoc-Objekt erstellt, aber wenn ich es in CellForRowAtIndexPath an mein Zellobjekt sende, bekomme ich nichts in das Label. Siehe den Code, den ich zum Senden verwende: TableViewCellDoc * item = [self.itemArray objectAtIndex: indexPath.row]; TableViewCell * cellItem = [[TableViewCell alloc] init]; cellItem.itemName.text = item.data.title; – Synny
Hum Ich habe das Problem gefunden, es kam von der Initialisierung meiner Zelle in CellForRowAtIndexPath. Ich habe es wie UITableViewCell getan * cell = [tableView dequeueReusableCellWithIdentifier: @ "cardCell"]; anstelle von TableViewCell (meine benutzerdefinierte Klasse so) ** Zelle = [tableView dequeueReusableCellWithIdentifier: @ "cardCell"] ;. Ich kann jetzt alle Artikel über die Delegate-Methode drucken, danke :) – Synny