iOS 应用程序(此类与键数据源的键值编码不兼容)

Posted

技术标签:

【中文标题】iOS 应用程序(此类与键数据源的键值编码不兼容)【英文标题】:iOS app (this class is not key value coding-compliant for the key dataSource) 【发布时间】:2012-01-13 11:52:22 【问题描述】:

我正在制作一个 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

【问题讨论】:

先签出 NSLog 会话 【参考方案1】:

您在界面生成器中的连接似乎不正确。您似乎在SessionsTableViewController 中的一个名为dataSource 的插座上附加了一些东西。看起来您可能想反过来做,因为我假设您在 SessionsTableViewController 中有一个表格视图。

因此,您需要将表格视图的 dataSource 属性附加到您的 SessionsTableViewController 实例(在您的情况下可能是“文件的所有者”),而不是相反。

【讨论】:

我明白了,我已将我的 SessionsTableViewController 设置为我的 TableView 而不是我的 TableViewController 的自定义类,谢谢,这就是我要找的,现在一切正常。【参考方案2】:

此错误通常发生在插座未正确连接时。在我的情况下,检查网点连接总是可以解决的。

【讨论】:

【参考方案3】:

检查以确保您没有在标有“模块”的框中指定错误的应用程序(就在“类”下方)。这是在 UI Builder 的 Identity Inspector 中。

您通常不应将任何内容指定为模块,因为它默认为标有“当前...”的灰色条目,这意味着它在所有应用程序中都可用。但是,如果您在此处指定了一个应用程序,则该 UI 项将无法用于您项目中的任何其他应用程序,当您尝试运行其他应用程序时会显示主题错误消息。

那是我的问题...

【讨论】:

如果这条评论回答了这个问题,目前还不清楚如何回答。考虑改写? 我不知道我还能如何改写它。如果您在 Module 中指定了任何内容,您将在尝试构建另一个模块时收到 OP 指定的错误。

以上是关于iOS 应用程序(此类与键数据源的键值编码不兼容)的主要内容,如果未能解决你的问题,请参考以下文章

iOS - AppDelegate 此类与键视图的键值编码不兼容

此类与键 XXXXXX 的键值编码不兼容

此类与键错误的键值编码不兼容

编辑核心数据会产生错误,此类与键的键值编码不兼容

如何修复错误:此类与键 tableView 的键值编码不兼容。 [复制]

未捕获的异常 'NSUnknownKeyException' - 此类与键 buttonPressed 的键值编码不兼容