我需要使用UISearchBar
搜索位于文档目录中的pdf文件。
我正在使用此方法从文档目录加载PDF以显示在UITableView
。
- (NSArray *)loadBookFromDocumentDirectory
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [NSString stringWithFormat:@"%@",[paths objectAtIndex:0]];
NSFileManager *manager = [NSFileManager defaultManager];
NSError *error;
NSArray *files = [manager contentsOfDirectoryAtURL:[NSURL fileURLWithPath:documentsDirectory]
includingPropertiesForKeys:[NSArray arrayWithObject:NSURLContentModificationDateKey]
options:NSDirectoryEnumerationSkipsHiddenFiles
error:&error];
NSArray* sortArray = [files sortedArrayUsingComparator:
^(NSURL *file1, NSURL *file2)
{
NSDate *file1Date;
[file1 getResourceValue:&file1Date forKey:NSURLContentModificationDateKey error:nil];
NSDate *file2Date;
[file2 getResourceValue:&file2Date forKey:NSURLContentModificationDateKey error:nil];
return [file2Date compare: file1Date];
}];
return sortArray;
}
我可以在UITableView
中成功显示所有pdf文档。但是,当我尝试使用以下代码进行搜索时,我的应用程序崩溃并显示此消息。
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Can't use in/contains operator with collection file:///Users/User/Library/Application%20Support/iPhone%20Simulator/7.1-64/Applications/D0191F36-D11A-47DF-9274-BE2C72B9C8E1/Documents/%E1%80%B1%E1%80%A1%E1%80%AC%E1%80%B9%E1%80%90%E1%80%AD%E1%80%AF%20Desk%203D%20%E1%80%B1%E1%80%9C%E1%80%B7%E1%80%80%E1%80%BA%E1%80%84%E1%80%B7%E1%80%B9%E1%80%81%E1%80%94%E1%80%B9%E1%80%B8.pdf (not a collection)'
以下是textDidChange
事件中的代码。
self.filterArray = [[NSMutableArray alloc] init];
[self.filterArray removeAllObjects];
NSPredicate *filter = [NSPredicate predicateWithFormat:@"self Contains[cd] %@",searchText];
self.filterArray = (NSMutableArray *)[self.arrayOfBooks filteredArrayUsingPredicate:filter];
这是UITableViewCell
代码。
NSURL *url = [self.filterArray objectAtIndex:indexPath.row];
cell.textLabel.text = [[[[url absoluteString] lastPathComponent] stringByReplacingOccurrencesOfString:@"+" withString:@" "] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
我该如何解决?请帮帮我。
答案 0 :(得分:2)
我猜您需要将URL更改为字符串才能运行谓词。尝试:
[NSPredicate predicateWithFormat:@"absoluteString Contains[cd] %@",searchText];
我知道您希望网址开头,以便您可以缓存日期,但之后您似乎只需要字符串,因此您可以在valueForKey:@"absoluteString"
上使用sortArray
,然后您就不需要了担心后续代码中的URL转换。