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 此类与键视图的键值编码不兼容
如何修复错误:此类与键 tableView 的键值编码不兼容。 [复制]
未捕获的异常 'NSUnknownKeyException' - 此类与键 buttonPressed 的键值编码不兼容