iOS-приложение (этот класс не совместим со значением ключа для источника данных ключа) - PullRequest
8 голосов
/ 13 января 2012

Я делаю приложение для iPhone и работаю над этим TableViewController, но при тестировании у меня появляется эта ошибка, и я не знаю, что с ней делать:

2012-01-13 13:45:32.947 HandHistory Reviews[3422:707] *** 
Terminating app due to uncaught exception 'NSUnknownKeyException', 
reason: '[<SessionsTableViewController 0x191cb0> setValue:forUndefinedKey:]: 
this class is not key value coding-compliant for the key dataSource.'

Кто-нибудь получил идею?

Это мой файл SessionTableViewController.m:

#import "SessionsTableViewController.h"
#import "Session.h"

@interface SessionsTableViewController()

@property (nonatomic, copy) NSArray *sessions;

@end

@implementation SessionsTableViewController

@synthesize sessions = _sessions;

#pragma mark - View lifecycle

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    NSMutableArray *sessions = [[NSMutableArray alloc] init];

    // Looking for files
    // Finding the Documents directory
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *path = [paths objectAtIndex:0];
    NSArray *directoryContent = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil];

    // Looping through each file in the directory
    for (NSString *file in directoryContent)
    {
        NSString *contents = [NSString stringWithContentsOfFile:[[paths objectAtIndex:0] stringByAppendingPathComponent:file] encoding:NSUTF8StringEncoding error:nil];

        Session *session = [[Session alloc] initWithName:file andContents:contents];

        [sessions addObject:session];
    }

    self.sessions = sessions;
}

#pragma mark - Table view data source

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.sessions count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Session Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    //cell.textLabel.text = [[self.sessions objectAtIndex:indexPath.row] name];
    //cell.detailTextLabel.text = [[NSString alloc] initWithFormat:@"%d hands", 10];

    return cell;
}



#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Navigation logic may go here. Create and push another view controller.
    /*
     <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
     // ...
     // Pass the selected object to the new view controller.
     [self.navigationController pushViewController:detailViewController animated:YES];
     */
}

@end

Ответы [ 3 ]

16 голосов
/ 13 января 2012

Похоже, вы неправильно подключили интерфейс в конструкторе интерфейсов.Похоже, что вы подключили что-то к розетке dataSource в вашем SessionsTableViewController.Похоже, что вы, вероятно, хотели сделать это наоборот, так как я предполагаю, что у вас есть табличное представление в SessionsTableViewController.

Итак, вам нужно прикрепить свойство dataSource вашего табличного представления к вашему экземпляруSessionsTableViewController (вероятно, «Владелец файла» в вашем случае), а не наоборот.

0 голосов
/ 21 марта 2019

Эта ошибка обычно возникает, когда розетки подключены неправильно. В моем случае проверка розеток всегда решит проблему.

0 голосов
/ 20 июля 2016

Проверьте, чтобы убедиться, что вы не указали неправильное приложение в поле с надписью Модуль (сразу под Классом). Это в Identity Inspector в UI Builder.

Обычно вы не должны указывать что-либо в качестве модуля, так как по умолчанию используется неактивная запись, помеченная как «текущая ....», что означает, что она доступна во всех приложениях. Но, если вы указали приложение здесь, элемент пользовательского интерфейса не будет доступен для других приложений в вашем проекте, и вы получите сообщение об ошибке субъекта при попытке запустить другие приложения.

Это была моя проблема ...

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