もちろん、ファイルパスをロードした後にas.json
と呼ばれる配列にロードしているファイルをローカルに保存しました。次のように配列にロードしています:countries
countries = (NSArray *)[NSJSONSerialization JSONObjectWithData [fileContents dataUsingEncoding:NSUTF8StringEncoding] options:0 error:NULL];
.json
countries
NSString * filePath =[[NSBundle mainBundle] pathForResource:@"countries" ofType:@"json"];
NSError * error;
NSString* fileContents =[NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error];
if(error||!filePath)
{
NSLog(@"Error reading file: %@",error.localizedDescription);
}
countries = (NSArray *)[NSJSONSerialization
JSONObjectWithData:[fileContents dataUsingEncoding:NSUTF8StringEncoding]
options:0 error:NULL];
その後、NSMutableArray
呼び出されたを取得し、displayItems
として初期化しましたdisplayItems = [[NSMutableArray alloc] initWithArray:countries];
。私が使用したデリゲート メソッド
よりも、 After Gives は値を正しく取得していることを意味し、問題の階層については以下の画像を参照してください:
ブレーク ポイントに基づいて、このメソッドは問題を作成しています。UITableView
displayItems
count
NSLog
248
cellForRowAtIndexPath
didSelectRowAtIndexPath
ViewController
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
if ([searchText length] == 0) {
[displayItems removeAllObjects];
[displayItems addObjectsFromArray:countries];
} else {
[displayItems removeAllObjects];
for (NSString *string in countries) {
NSRange r = [string rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (r.location != NSNotFound) {
[displayItems addObject:string];
}
}
}
[tableView reloadData];
}
行に達するRange r
と、アプリがクラッシュし、エラーはunrecognized selector sent to instance
. その時点でアプリがクラッシュ
するまで、すべてがうまく機能しています。UISearchBar
正確なエラーは次のとおりです。
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary rangeOfString:options:]: unrecognized selector sent to instance 0x12ddd5e90'
*** First throw call stack:
(0x180a55900 0x1800c3f80 0x180a5c61c 0x180a595b8 0x18095d68c 0x1000d0e3c 0x185953d28 0x18577fe50 0x18577fdcc 0x185767a88 0x185953ad4 0x18578a8f8 0x18591fee8 0x18591f104 0x185aafae4 0x186095b20 0x18591ee70 0x185b5cc90 0x185b5c854 0x185772e84 0x181417e20 0x180a0cefc 0x180a0c990 0x180a0a690 0x180939680 0x181e48088 0x1857b0d90 0x1000e0e94 0x1804da8b8)
libc++abi.dylib: terminating with uncaught exception of type NSException