如何让我在 xcode 4.6 ios6 中的表格视图正常工作?

Posted

技术标签:

【中文标题】如何让我在 xcode 4.6 ios6 中的表格视图正常工作?【英文标题】:How can I get my Table View in xcode 4.6 ios6 working? 【发布时间】:2013-06-03 16:01:58 【问题描述】:

我知道有很多类似我的帖子,但我仍然无法让代码正常工作。任何帮助将不胜感激。

我没有实现我想要实现的所有方法,所以不要担心这些。在我将xib 中的tableview 链接到数据源并委托后,错误就出现了。

如果我应该发布其他相关内容,请告诉我。

错误:

2013-06-03 10:57:16.814 WID Sign-in[7587:11303] -[UITableView tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0xb3b0800
2013-06-03 10:57:16.816 WID Sign-in[7587:11303] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableView tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0xb3b0800'
*** First throw call stack:
(0x1c94012 0x10d1e7e 0x1d1f4bd 0x1c83bbc 0x1c8394e 0x1fa548 0x1fd224 0xc1952 0xc12dc 0xc4dd6 0xc9a7e 0x662dd 0x10e56b0 0x2290fc0 0x228533c 0x2290eaf 0x1052bd 0x4db56 0x4c66f 0x4c589 0x4b7e4 0x4b61e 0x4c3d9 0x4f2d2 0xf999c 0x46574 0x4676f 0x46905 0x4f917 0x2cdb 0x13157 0x13747 0x1494b 0x25cb5 0x26beb 0x18698 0x1befdf9 0x1befad0 0x1c09bf5 0x1c09962 0x1c3abb6 0x1c39f44 0x1c39e1b 0x1417a 0x15ffc 0x291d 0x2845 0x1)
libc++abi.dylib: terminate called throwing an exception
(lldb) 

.h:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
    NSMutableArray *existingNames;
    NSMutableArray *existingCompanies;
    NSMutableArray *currentNames;
    NSMutableArray *currentCompanies;
IBOutlet UITableView *preExisting;



@property (nonatomic, retain) NSMutableArray *existingNames;
@property (nonatomic, retain) NSMutableArray *existingCompanies;
@property (nonatomic, retain) NSMutableArray *currentNames;
@property (nonatomic, retain) NSMutableArray *currentCompanies;

@property (weak, nonatomic) IBOutlet UITextField *name;

@property (weak, nonatomic) IBOutlet UITextField *company;


- (IBAction)add:(id)sender;
- (IBAction)addExisting:(id)sender;

@end

.m:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
@synthesize name, company, existingNames, existingCompanies, currentNames, currentCompanies;

- (void)viewDidLoad

[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.


- (void)didReceiveMemoryWarning

[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
return 1;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
return [existingCompanies count]; // <------- here there is the problem with ios 5.1, also [array1 count]


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

return 20;


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (cell == nil) 
    cell = [[UITableViewCell alloc] initWithStyle:
            UITableViewCellStyleSubtitle reuseIdentifier:@"Cell"];


cell.textLabel.backgroundColor = [UIColor clearColor];
cell.detailTextLabel.backgroundColor = [UIColor clearColor];

cell.textLabel.text = [NSString stringWithFormat:@"???? %@",[existingCompanies objectAtIndex:indexPath.row]];
cell.textLabel.font = [UIFont systemFontOfSize:13];
cell.textLabel.textColor = [UIColor blackColor];

return cell;



- (IBAction)add:(id)sender 
BOOL exists = [existingNames containsObject:name.text];

if(exists == FALSE)
    [existingNames addObject:name.text];
    [existingCompanies addObject:company.text];


[currentNames addObject:name.text];
[currentCompanies addObject:company.text];

name.text=@"";
company.text=@"";

// Set the delegate and datasource. Don't expect picker view to work
// correctly if you don't set it.



- (IBAction)addExisting:(id)sender 

@end

【问题讨论】:

你能登录现有的公司吗?另外,你在哪里添加数据?它说您正在向 UITableView 调用“numberOfRowsInSection”。看起来您评论的那一行不是问题所在。设置异常断点了吗? 这次我还没有添加任何数据,否则以同样的方式失败。它会在没有任何数据的情况下中断,还是在运行时应该有一个空白表格视图? 【参考方案1】:

您似乎错误地连接了您的 tableview 数据源。

[UITableView tableView:numberOfRowsInSection:]: 无法识别的选择器 发送到实例 0xb3b0800'

这表示框架试图在不符合UITableViewDataSource 协议的对象上调用tableView:numberOfRowsInSection 选择器。

【讨论】:

+1 给你...你在“POST”按钮上比我快 7 秒,克里斯 你是说我不能像我尝试的那样使用 NSMutableArray 吗?你对如何解决这个问题有什么建议吗? 不,在界面生成器中(我假设您正在使用它)您已经 ctrl 将 tableview 数据源拖回 tableview。您需要确保 tableview 数据源是 ViewController。 您可以使用 NSMutableArray 作为数据源,在 Interface Builder 中检查您的插座以获取您的 preExisting 插座,它应该有一个 dataSource 属性,而且您似乎把它连接到了错误的东西上. 啊,对不起,我的困惑。我已经将表视图链接到视图控制器(.xib ctrl 单击到.h)到界面构建器,并且还作为属性(单独),每个都会导致相同的错误。我做错了吗?【参考方案2】:

看起来您已将表视图出口指定为数据源,而不是视图控制器。

将数据源更改为视图控制器,并且应该正确调用该数据源方法。

【讨论】:

【参考方案3】:

我没有正确启动我的 NSMutableArrays,也没有在我的 .h 中声明它们,这是不必要的。感谢那些试图提供帮助的人!

【讨论】:

以上是关于如何让我在 xcode 4.6 ios6 中的表格视图正常工作?的主要内容,如果未能解决你的问题,请参考以下文章

CocoaLibSpotify 无法在 XCode 4.6 / iOS 6.1 中编译

仅当我单击全屏选项卡时才以纵向播放视频,它会停止播放(Xcode 4.6)ios6.1

如何为 iOS 6 xcode 4.6 制作任何时间动画?

XCode 4.6:iOS 6.1 - 验证时出现 CFBundleVersion 和 CFBundleShortVersionString 错误

xcode 4.6 无法显示部署目标 4.2

如何使用 xcode < 4.5 构建具有 iOs6 功能的应用程序?