【问题标题】:Terminating app due to uncaught exception 'NSInternalInconsistencyException? any clue?由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序?任何线索?
【发布时间】:2013-08-29 07:04:58
【问题描述】:

这是我现在正在使用但仍然出现各种错误的代码:

No visible @interface for 'HomeViewController' declares the selector 'getCount' 

还有

/Volumes/Lex/HomeViewController.h:12:12: Required for direct or indirect protocol 'UIPickerViewDataSource'
/Volumes/Lexar/HomeViewController.m:15:17: Incomplete implementation

我的代码(.m 文件)

- (void)viewDidLoad
{
    [super viewDidLoad];

    PFUser *currentUser = [PFUser currentUser];
    if (currentUser) {
        NSLog(@"Current user: %@" , currentUser.username);
    }
    else {
        [self performSegueWithIdentifier:@"showLogin" sender:self];

        self.pickerView.dataSource = self;
        self.pickerView.delegate = self;
    }
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:  (NSInteger)component
{
    if ([self getCount] == 0)
        return 1;
    return [self getCount];
}

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:     (NSInteger)component reusingView:(UIView *)view {
    if ([self getCount] == 0)
        return nil;
}

- (IBAction)logout:(id)sender {
    [PFUser logOut];
    [self performSegueWithIdentifier:@"showLogin" sender:self];
}
@end

还有标题

/// .h controller

#import <UIKit/UIKit.h>
#import <Parse/Parse.h>

@interface HomeViewController : UIViewController <UIPickerViewDataSource,    UIPickerViewDelegate>

@property (strong, nonatomic) IBOutlet UIPickerView *pickerView;

- (IBAction)logout:(id)sender;

@end

【问题讨论】:

  • 请分享相关代码。
  • 我没有任何代码,就是这样。我只是通过故事板将选择器放在控制器中,然后当我测试运行应用程序时,当我点击未填充的选择器时会抛出该错误
  • 我刚刚尝试重新创建和重新分配 .h 和 .m 类,但这不起作用。然后我尝试从头开始重建故事板界面,但没有成功。我不太确定还能做什么:/
  • 我认为您还没有为 UIPickerView 实现数据源方法。实施这些以使其发挥作用。
  • 请解释一下。我是白痴。

标签: ios uipickerview


【解决方案1】:

正如您在评论中提到的,您只是放置 UIPickerView...但是要使用选择器视图,您需要像 UITableView 一样设置数据源,并且必须实现所有 @required 方法。

在picker view的数据源协议中,有2个@required方法

// returns the number of 'columns' to display.
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;

// returns the # of rows in each component..
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;

所以你需要在你的控制器中实现以上两种方法(比如MainViewController)。并且不要忘记将此类设置为 UIPicker 视图的委托和数据源,如下所示

ViewDidLoad 中的MainViewController

self.yourPickerView.datasource = self;
self.yourPickerView.delegate = self;

【讨论】:

  • 好吧,我不知道我必须这样做。因为当我第一次将选择器放入时,它工作正常。然后我删除了它并在我的代码中改变了一些东西,当我把它放回去时,我一直收到这个错误。我会试试看,让你知道结果如何,谢谢!
猜你喜欢
  • 2014-01-05
  • 2012-07-28
  • 2015-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-08
相关资源
最近更新 更多