2016-06-28 5 views
-3

すべての重複した質問を見て、すべての解決策を試しました。しかし、私は正常に私のアプリを実行することができませんでした。NSInvalidArgumentException tableView.reloadDataを呼び出そうとしたとき?

ボタンをクリックすると、NSMutableArrayがDatabaseクラスから取得され、ローカルのNSMutableArrayオブジェクト(これは私のtableViewに設定されています)に格納され、tableView.reloadDataが呼び出されました。ここで

はのbuttonPressed

#import "SearchPage.h" 
#import "DBManager.h" 

@interface SearchPage() 

@property (nonatomic, strong) UITextField *textField; 
@property (nonatomic, strong) UILabel *label; 
@property (nonatomic, strong) UITableView *tableView; 
@property (nonatomic,strong) NSMutableArray *testData; 
@property (nonatomic,strong) UIButton *button; 
-(IBAction)buttonpressed:(id)sender; 
@end 

@implementation SearchPage 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell"]; 
    if(cell == nil) 
    { 
     cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MyCell"]; 
    } 
    cell.textLabel.text=[_testData objectAtIndex:indexPath.row]; 
    return cell; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
     return self.testData.count; 

} 




- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    self.testData=[[NSMutableArray alloc]init]; 
/* [self.testData addObject:@"Clash of clans"]; 
    [self.testData addObject:@"Prince of persia"]; 
    [self.testData addObject:@"Vice city"]; 
    [self.testData addObject:@"San andreas"]; 
    [self.testData addObject:@"Tomb rider"]; 
    [self.testData addObject:@"Counter Strike"]; */ 

    self.screenRect=[[UIScreen mainScreen]bounds]; 
    self.width=self.screenRect.size.width; 
    self.height=self.screenRect.size.height; 

    self.tableView=[[UITableView alloc]initWithFrame:CGRectMake(0, 60, _width, _height-60) style:UITableViewStylePlain]; 
    self.tableView.delegate=self; 
    self.tableView.dataSource=self; 
    [self.view addSubview:self.tableView]; 

    self.textField = [[UITextField alloc] initWithFrame: CGRectMake(70.0f, 80.0f, 100.0f , 30.0f)]; 
    self.textField.borderStyle = UITextBorderStyleRoundedRect; 
    self.textField.returnKeyType = UIReturnKeyNext; 
    self.textField.delegate = self; 
    [self.view addSubview:self.textField]; 

    self.button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    self.button.frame = CGRectMake(200.0f , 80.0f , 100.0f, 30.0f); 
    [self.button addTarget:self action:@selector(buttonpressed:) forControlEvents:UIControlEventTouchUpInside]; 
    [self.button setTitle:@"Find it" forState:UIControlStateNormal]; 
    [self.view addSubview:self.button]; 

    self.label = [[UILabel alloc]initWithFrame:CGRectMake(70, 110.0f, 240.0f , 30.0f)]; 
    self.label.textAlignment = NSTextAlignmentCenter; 
    self.label.text = @"Textbox should not be empty"; 
    self.label.textColor = [UIColor redColor]; 

    [self.view addSubview:self.label]; 

} 

- (IBAction)buttonpressed:(id)sender { 
    [self findData]; 
    [[self tableView] reloadData]; 
} 


-(void) findData { 
// [self.testData removeAllObjects]; 
    self.testData = [NSMutableArray arrayWithArray:[[DBManager getSharedInstance] getAll]]; 
    // self.testData = [[DBManager getSharedInstance] getAll]; 

    for(int i=0;i<self.testData.count;i++){ 
     NSLog(@"FROM ARRAY : %d",[[self.testData objectAtIndex:i] intValue]); 
    } 


} 



- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

/* 
#pragma mark - Navigation 

// In a storyboard-based application, you will often want to do a little preparation before navigation 
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    // Get the new view controller using [segue destinationViewController]. 
    // Pass the selected object to the new view controller. 
} 
*/ 

@end 

は私がボタンを押したときに呼び出される関数である、私のコードです。私が試した

は、

[self.testData removeAllObjects];

も、これを試してみました

self.testData = [NSMutableArray arrayWithArray:[[DBManager getSharedInstance] getAll]];

の代わりに、この self.testData = [[DBManager getSharedInstance] getAll];

何も働きました。

reloadData行に達すると、アプリケーションがクラッシュし、次のエラーが発生します。時間

-[__NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0xb000000000000092 
2016-06-28 09:20:07.756 CalcwithDBProgramatically[528:8810] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0xb000000000000092' 
*** First throw call stack: 
(
    0 CoreFoundation      0x000000010519fe65 __exceptionPreprocess + 165 
    1 libobjc.A.dylib      0x0000000104c16deb objc_exception_throw + 48 
    2 CoreFoundation      0x00000001051a848d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205 
    3 CoreFoundation      0x00000001050f590a ___forwarding___ + 970 
    4 CoreFoundation      0x00000001050f54b8 _CF_forwarding_prep_0 + 120 
    5 UIKit        0x0000000105c10a19 -[UITableViewLabel setText:] + 119 
    6 CalcwithDBProgramatically   0x00000001045f50c5 -[SearchPage tableView:cellForRowAtIndexPath:] + 341 
    7 UIKit        0x00000001058cfe43 -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 766 
    8 UIKit        0x00000001058cff7b -[UITableView _createPreparedCellForGlobalRow:willDisplay:] + 74 
    9 UIKit        0x00000001058a4a39 -[UITableView _updateVisibleCellsNow:isRecursive:] + 2996 
    10 UIKit        0x00000001058d901c -[UITableView _performWithCachedTraitCollection:] + 92 
    11 UIKit        0x00000001058bfedc -[UITableView layoutSubviews] + 224 
    12 UIKit        0x000000010582d4a3 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 703 
    13 QuartzCore       0x0000000109d2259a -[CALayer layoutSublayers] + 146 
    14 QuartzCore       0x0000000109d16e70 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366 
    15 QuartzCore       0x0000000109d16cee _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24 
    16 QuartzCore       0x0000000109d0b475 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 277 
    17 QuartzCore       0x0000000109d38c0a _ZN2CA11Transaction6commitEv + 486 
    18 UIKit        0x0000000105770f7c _UIApplicationHandleEventQueue + 7329 
    19 CoreFoundation      0x00000001050cba31 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17 
    20 CoreFoundation      0x00000001050c195c __CFRunLoopDoSources0 + 556 
    21 CoreFoundation      0x00000001050c0e13 __CFRunLoopRun + 867 
    22 CoreFoundation      0x00000001050c0828 CFRunLoopRunSpecific + 488 
    23 GraphicsServices     0x00000001097d5ad2 GSEventRunModal + 161 
    24 UIKit        0x0000000105776610 UIApplicationMain + 171 
    25 CalcwithDBProgramatically   0x00000001045f916f main + 111 
    26 libdyld.dylib      0x0000000106dc092d start + 1 
    27 ???         0x0000000000000001 0x0 + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 

おかげで(:

+0

あなたの配列は 'NSString'ではなく' NSNumber'sを含んでいます。 – Avi

+0

はい...それには数字が含まれています... – Ganesh

+0

'UILabel'の' text'プロパティに関するドキュメントをチェックしてください。 – Avi

答えて

0
cell.textLabel.text=[_testData objectAtIndex:indexPath.row]; 

代わりに上記の行の、以下のようにしてみてください:

は ​​
-1

私はクラッシュだと思う2つの値の比較をご確認ください。この行には[__NSCFNumber isEqualToString:] が含まれています。 この。このメソッドは、2つの文字列を比較するために使用します。

関連する問題