TableViewCell не отображает пользовательскую информацию о ячейке - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть табличное представление, которое получает информацию от устройств в постоянном хранилище данных, которое обновляется, когда что-то происходит. Это обновление отлично работает.

В любом случае, я получаю данные и загружаю их в свой TableDataVainView.plist и заставляю tableView перезагружать данные. Проблема в том, что клеточные линии есть, но нет данных.

Я проверил, что данные существуют, и они заполняются в cell.textLabel и cell.detailTextLabel, но, опять же, они не появляются.

Вот мой код:

- (NSManagedObjectContext *)managedObjectContext
{
    NSManagedObjectContext *context = nil;
    id delegate = [[UIApplication sharedApplication] delegate];
    if ([delegate performSelector:@selector(managedObjectContext)]) {
        context = [delegate managedObjectContext];
    }
    return context;
}

- (void)viewDidAppear:(BOOL)animated
{ // Fetch the devices from persistent data store
    NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Cell"];
    self.tableDataMainView = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Cell"
                                              inManagedObjectContext:self.managedObjectContext];
    [fetchRequest setEntity:entity];

    NSError *error;
    NSArray *items = [self.managedObjectContext
                      executeFetchRequest:fetchRequest error:&error];
    NSManagedObjectContext *context = [self managedObjectContext];

    for (context in items) {
        NSLog(@"Title: %@,", [context name]);
    }
    cellNamesArray = [items valueForKey:@"image"];
    NSLog(@"cellNameArray;%@",cellNamesArray);

    [self.tableView reloadData];
}

- (void)viewDidLoad {
    [super viewDidLoad];

self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 20)];

self.tableView.contentInset = UIEdgeInsetsMake(0, -10, 0, 0);
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *slasha = [documentsDirectory stringByAppendingPathComponent:@"/Names"];
    NSArray * directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:slasha error:nil];

    NSString *slashb = [documentsDirectory stringByAppendingPathComponent:@"/Images"];
    NSArray * directoryContentsImages = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:slashb error:nil];

    int pictureCount;

    for (pictureCount = 0; pictureCount < (int)[directoryContentsImages count]; pictureCount++)
    {

        NSLog(@"File %d: %@", (pictureCount + 1), [directoryContentsImages objectAtIndex:pictureCount]);
    }

    NSLog(@"count:%d,",count);
    NSLog(@"picturecount:%d,",pictureCount);
for (count = 0; count < (int)[directoryContents count]; count++)
    {

        NSLog(@"File %d: %@", (count + 1), [directoryContents objectAtIndex:count]);
    }

    NSLog(@"count:%d,",count);
    Names = [NSArray arrayWithArray:directoryContents];

    NSLog(@"namesArray;%@",Names);
    if (count == 0) {

    }
    else if (count == 1) {
        nameOne = [Names objectAtIndex:0];
        NSLog(@"nameOne;%@",nameOne);
        NSArray *coorArray = [nameOne componentsSeparatedByString:@","];
        NSString *firstString = [coorArray objectAtIndex:0];
        NSString *secondString = [coorArray objectAtIndex:1];
        NSLog(@"firstString;%@",firstString);
        NSLog(@"secondString;%@",secondString);
    }
    else if (count == 2) {
        nameOne = [Names objectAtIndex:0];
        NSString *nameTwo =[Names objectAtIndex:1];
        NSArray *coorArray = [nameOne componentsSeparatedByString:@","];
        NSString *firstString = [coorArray objectAtIndex:0];
        NSString *secondString = [coorArray objectAtIndex:1];
        NSLog(@"firstString;%@",firstString);
        NSLog(@"secondString;%@",secondString);
        NSArray *coorArray2 = [nameTwo componentsSeparatedByString:@","];
        NSString *firstString2 = [coorArray2 objectAtIndex:0];
        NSString *secondString2 = [coorArray2 objectAtIndex:1];
        NSLog(@"firstString2;%@",firstString2);
        NSLog(@"secondString2;%@",secondString2);
    }

    else if (count == 3) {
        nameOne = [Names objectAtIndex:0];
        NSString *nameTwo =[Names objectAtIndex:1];
         NSString *nameThree =[Names objectAtIndex:1];
        NSArray *coorArray = [nameOne componentsSeparatedByString:@","];
        NSString *firstString = [coorArray objectAtIndex:0];
        NSString *secondString = [coorArray objectAtIndex:1];
        NSLog(@"firstString;%@",firstString);
        NSLog(@"secondString;%@",secondString);
        NSArray *coorArray2 = [nameTwo componentsSeparatedByString:@","];
        NSString *firstString2 = [coorArray2 objectAtIndex:0];
        NSString *secondString2 = [coorArray2 objectAtIndex:1];
        NSLog(@"firstString2;%@",firstString2);
        NSLog(@"secondString2;%@",secondString2);
        NSArray *coorArray3 = [nameThree componentsSeparatedByString:@","];
        NSString *firstString3 = [coorArray3 objectAtIndex:0];
        NSString *secondString3 = [coorArray3 objectAtIndex:1];
        NSLog(@"firstString3;%@",firstString3);
        NSLog(@"secondString3;%@",secondString3);
    }}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    NSLog(@"number of sections called");
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
   NSLog(@"got row count");

    return self.tableDataMainView.count;
}
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"index path");
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   NSLog(@"Cell");

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

    // Configure the cell...
    device = [self.tableDataMainView objectAtIndex:indexPath.row];
    [cell.textLabel setText:[device valueForKey:@"name"]];
    NSLog(@"celltextlabel%@",cell.textLabel.text);
    NSLog(@"deviceName???%@",device);
    cell.detailTextLabel.frame = CGRectMake(16, 35, 200, 65);
    [cell.detailTextLabel setText:[device valueForKey:@"winloss"]];
    NSLog(@"celldetailtextlabel%@",cell.detailTextLabel.text);
    NSLog(@"devicewinloss???%@",device);

   [cell setBackgroundColor:[UIColor clearColor]];
    UIView *myBackView = [[UIView alloc] init];
    myBackView.backgroundColor = [UIColor clearColor];
    cell.selectedBackgroundView = myBackView;
    NSArray *paths1 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                          NSUserDomainMask, YES);
    NSString *documentsDirectory1 = [paths1 objectAtIndex:0];
    NSString *slash3 = [documentsDirectory1 stringByAppendingPathComponent:@"/Images"];


    NSString *fullPath1 = [slash3 stringByAppendingPathComponent:[device valueForKey:@"image"]];

    //Now load the image at fullPath and install it into our image view's image property.
    if (![[NSFileManager defaultManager] fileExistsAtPath:fullPath1]){

    }
    else {

        cell.imageView.image = [UIImage imageWithContentsOfFile: fullPath1];
        NSLog(@"fullPath1:%@",fullPath1);
    }

    cell.imageView.layer.cornerRadius = 40;
    cell.imageView.clipsToBounds = YES;

    [cell.textLabel setTextColor:[UIColor whiteColor]];
    [cell.detailTextLabel setTextColor:[UIColor whiteColor]];

    return cell;
 }

Как я уже говорил, раньше все работало нормально, но потом перестало работать.
Я делаю жесткий код некоторых фоновых представлений, но не tableView, который установлен в IB. Но так как я вижу линии деления клеток, я думаю, что табличное представление находится сверху. Я связал источник данных и делегировал tableView. Просто не уверен, почему он не отображает информацию о ячейке.

Любая помощь будет принята с благодарностью.

So as I came to suspect I have two backgrounds that are put in place by code ie.
[self.view insertSubview:backgroundImage atIndex:0];

    backgroundImage.image = [UIImage imageNamed:@"tilebackground long.png"];

self.backgroundImage2.image = [UIImage imageNamed:@"just stars long.png"];
    backgroundImage2.hidden = NO;
    [self.view insertSubview:backgroundImage2 atIndex:1];

, так как мой tableView создан в IB, он находится в Index: 0

Изменив мой код, поместив backgroundImage atIndex: -2 и backgroundImage2 atIndes: -1 Теперь отображается мой tableView, но у него черный фон, поэтому я не вижу двух своих backgroundImages.

В IB я сделал фон просмотра таблицы четким и в коде, а также фон ячейки, но все же есть черный фон.

Так как это все еще является проблемой tableView, я решил изменить это, чтобы увидеть, как сделать фон tableView четким. Если мне нужно, я могу задать еще один вопрос и отметить, что он сделан.

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Я заметил, что ваш viewDidAppear метод не вызывает:

[super viewDidAppear:animated];

Это может быть или не быть основной проблемой, но это приведет к неопределенному поведению. Сделайте это первой строкой в ​​viewDidAppear.

Еще один совет - вывести на экран неверно работающее табличное представление, а затем использовать функцию «иерархии представления отладки» в Xcode. Это как точка останова, но для представлений. Вы сможете точно видеть, что на экране и в каком порядке.

0 голосов
/ 06 ноября 2018

в вашем коде, UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; Это показывает, что есть много неприятностей, так как вы не подготовлены сами. Возвращенная ячейка может отличаться от указанной.

Простое быстрое решение этой проблемы - использование настроенного UITableViewCell. Затем зарегистрируйтесь как CellIdentifier в tableViewController. Таким образом, вы можете настроить файл nib / xib, особенно если время ограничено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...