我有两天被困,因为我的NSArray不起作用。
当我运行应用程序时一切正常但是当我触摸searchBar时,应用程序关闭原因:' - [__NSArrayM tableView]:无法识别的选择器发送到实例0x16e34c50'
@implementation ViewController
-(BOOL)prefersStatusBarHidden
{
return YES;
}
- (void)viewDidLoad
{
[super viewDidLoad];
monthArray = [[ NSMutableArray alloc] initWithObjects:@"Paliwizumab",@"Opis przedmiotu zamówienia",@"Paliwizumab a 0,1g inj I.M ( proszek + rozpuszczalnik)",@"Paliwizumab a 0,05 g I.M ( proszek + rozpuszczalnik )",@"Nazwa międzynarodowa",@"PALIVISUMABUM*",@"Paliwizumab01",@"Paliwizumab02",@"Paliwizumab03",@"Paliwizumab04",@"Paliwizumab05",@"Paliwizumab06", nil];
[searchBar setParentController:self];
[searchBar setParentController:monthArray];
[searchBar setDelegate:searchBar];
[self prefersStatusBarHidden];
}
-(void) viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:searchBar selector:@selector(keyboardWillShow:) name: (UIKeyboardWillShowNotification ) object:nil];
}
-(void)viewDidDisappear:(BOOL)animated
[super viewDidDisappear:animated];
[[NSNotificationCenter defaultCenter] removeObserver:searchBar];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [[self monthArray]count];
}
-(NSMutableArray*)monthArray
{
if (searchBar.isSearching == 1)
return searchBar.searchArray;
else
return monthArray;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellId = @"CellId";
UITableViewCell *cell = [self->_tableView dequeueReusableCellWithIdentifier:CellId];
if (! cell)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellId];
[cell.textLabel setText:[[self monthArray] objectAtIndex:indexPath. row]];
return cell;
}
@end
ViewController.h
#import <UIKit/UIKit.h>
#import "JPSearchBar.h"
@interface ViewController : UIViewController<UITableViewDelegate>
{
NSMutableArray *monthArray;
IBOutlet JPSearchBar *searchBar;
}
@property (strong, nonatomic) IBOutlet UITableView *tableView;
-(NSMutableArray*)monthArray;
@end
答案 0 :(得分:3)
在Objective-C中,&#34;无法识别的选择器&#34;错误意味着您尝试在对象上执行方法(即&#34;向其发送消息&#34;其中&#34;消息&#34;由&#34;选择器&#34;标识),但该对象没有实现该方法(即&#34;不识别选择器&#34;)。
当你有一个错误类的对象时,通常会发生这种情况。在这种情况下,我猜测setParentController:
的{{1}}方法需要一些实现searchBar
的对象(可能tableView
,因为我看到它有self
}}属性,这意味着它有一个tableView
getter方法),但你给它tableView
代替。这只是一个猜测,因为你的其余代码都缺失了。 (例如&#39; s monthArray
?)