Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 预测崩溃_Ios_Objective C_Uisearchbar_Nspredicate - Fatal编程技术网

Ios 预测崩溃

Ios 预测崩溃,ios,objective-c,uisearchbar,nspredicate,Ios,Objective C,Uisearchbar,Nspredicate,在searchBar中,我有以下代码 - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { [searchBar resignFirstResponder]; self.filteredResults = [[NSMutableArray alloc] init]; NSPredicate* predicate = [NSPredicate predicateWithFormat:@"(%K ==

在searchBar中,我有以下代码

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { [searchBar resignFirstResponder]; self.filteredResults = [[NSMutableArray alloc] init]; NSPredicate* predicate = [NSPredicate predicateWithFormat:@"(%K == %@)", field1, field2]; self.filteredResults = (NSMutableArray *)[originalArray filteredArrayUsingPredicate:predicate]; } -(无效)搜索栏搜索按钮选中:(UISearchBar*)搜索栏 { [搜索栏辞职FirstResponder]; self.filteredResults=[[NSMutableArray alloc]init]; NSPredicate*谓词=[NSPredicate谓词格式:@“(%K==%@)”,字段1,字段2]; self.filteredResults=(NSMutableArray*)[原始数组FilteredArray使用谓词:谓词]; } 编辑:

-(BOOL)搜索栏应开始编辑:(UISearchBar*)搜索栏 { originalArray=[[NSArray alloc]initWithContentsOfFile:path]; 返回YES; } 第二次运行谓词时,程序在
searchBarSearchButtonClicked:searchBar
消息中分配
self.fiteredResults
时崩溃。如果我包含
[self.filteredResults removeAllObjects]
则程序在那里崩溃,因此它被删除,并且在第二次执行搜索时仍将不起作用。这段代码中有什么突出的地方导致崩溃吗?或者我应该去别处看看吗?提前感谢。

此行:

originalArray = [[NSFileManager defaultManager] fileExistsAtPath:path];
因为您试图将
BOOL
设置为数组属性


您应该创建数组的可变副本:

self.filteredResults = [[originalArray filteredArrayUsingPredicate:predicate] mutableCopy];

如何编写谓词存在问题。数组中的对象不包含“field1”属性。

已正确分配原始数组

工作的完整代码:

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { [searchBar resignFirstResponder]; NSString* documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString* path = [documentsDirectory stringByAppendingPathComponent:@"plist.plist"]; if ([[NSFileManager defaultManager] fileExistsAtPath:path]) { self.arrayFromCloud = [[NSArray alloc] initWithContentsOfFile:path]; } eventFromCloud = [[NSMutableArray alloc] init]; for (NSDictionary* dic in self.arrayFromCloud) { [eventFromCloud addObject:[dic valueForKey:@"event"]]; } [eventFromCloud removeObjectAtIndex:0]; self.filteredResults = [[NSMutableArray alloc] init]; searchBar.placeholder = @"SEARCH"; // Filter the array using NSPredicate NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(%K == %@)", @"venue name", @"starbucks"]; self.filteredResults = [[eventFromCloud filteredArrayUsingPredicate:predicate] mutableCopy]; searchBar.text = nil; self.arrayFromCloud = nil; eventFromCloud = nil; self.filteredResults = nil; } -(无效)搜索栏搜索按钮选中:(UISearchBar*)搜索栏 { [搜索栏辞职FirstResponder]; NSString*documentsDirectory=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)对象索引:0]; NSString*path=[DocumentsDirectoryStringByAppendingPathComponent:@“plist.plist”]; if([[NSFileManager defaultManager]fileExistsAtPath:path]){ self.arrayFromCloud=[[NSArray alloc]initWithContentsOfFile:path]; } eventFromCloud=[[NSMutableArray alloc]init]; for(NSDictionary*dic在self.arrayFromCloud中){ [eventFromCloud addObject:[dic valueForKey:@“事件”]; } [eventFromCloud removeObjectAtIndex:0]; self.filteredResults=[[NSMutableArray alloc]init]; searchBar.placeholder=@“搜索”; //使用NSPredicate筛选阵列 NSPredicate*谓词=[NSPredicate谓词格式:@“(%K==%@)”、@“场馆名称”、“星巴克”]; self.filteredResults=[[eventFromCloud filteredArrayUsingPredicate:predicate]mutableCopy]; searchBar.text=nil; self.arrayFromCloud=nil; eventFromCloud=nil; self.filteredResults=nil; }
我得到这段代码的唯一方法是,必须将中间数组和结果数组alloc/init分配给第二次搜索。最初甚至不知道这可能是他们造成的错误。

BOOL
分配给
NSArray
会有什么结果?编译器不是在对你大喊大叫吗?问题中的代码写得不正确。所以我继续将数组赋值移动到-(void)委托方法,第二次仍然得到错误。注意到在想要alloc/init数组后的输入错误,但它已经在这样做了@碳酸氢盐如果将BOOL分配给NSArray@aug2aug视情况而定。在MRC下,当然是这样。您将收到一条警告,指出存在“不带强制转换的从整数到指针的隐式转换”。相信我,我以前也这样过。毫无疑问!我对手头的东西摸不着头脑,感谢您的反馈您的作业“self.filteredResults=[[NSMutableArray alloc]init];”是浪费。您正在为“filteredResults”分配一个空数组,您从不使用它,然后在两行之后覆盖它。此外,您不应该将FilteredarrayingPredicate的结果强制转换为NSMutableArray。该方法返回一个NSArray。如果您需要一个可变数组,那么就调用结果的mutableCopy。更正了我的问题,对代码进行了调整以获得对其他UISearchBar委托方法的分配,以及错误persists@Nicholas,alloc init将覆盖resultsArray。我不希望结果一直存在于该数组中。我不确定我们是否在通信。你现在做的基本上是。。。“self.filteredResults=‘empty array’;self.filteredResults=‘my results’;“第一次分配空数组只是浪费了cpu周期和内存分配。@NicholasHart完全正确,分配给空数组是完全没有用的。感谢您的输入,这些该死的东西第一次就可以用了,但不要认为这就是问题所在例外情况会告诉你到底出了什么问题。您告诉NSPredicate根据名为“field1”的键进行筛选,而系统告诉您它不能这样做,因为数组中的某些对象与“field1”的键值不兼容(即:数组中的一个或多个对象上不存在该属性或键)。代码第一次运行时没有问题,我再次运行它,它会引发错误,同时与第一次运行代码时对同一原始数组具有相同的赋值。我感谢你的反馈。有些东西第一次运行良好并不意味着你的代码或输入数据没有问题。在筛选之前,请尝试将originalArray记录在该行中,并检查要筛选的数据,例如:NSLog(@“originalArray:%@”,originalArray); - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { [searchBar resignFirstResponder]; NSString* documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString* path = [documentsDirectory stringByAppendingPathComponent:@"plist.plist"]; if ([[NSFileManager defaultManager] fileExistsAtPath:path]) { self.arrayFromCloud = [[NSArray alloc] initWithContentsOfFile:path]; } eventFromCloud = [[NSMutableArray alloc] init]; for (NSDictionary* dic in self.arrayFromCloud) { [eventFromCloud addObject:[dic valueForKey:@"event"]]; } [eventFromCloud removeObjectAtIndex:0]; self.filteredResults = [[NSMutableArray alloc] init]; searchBar.placeholder = @"SEARCH"; // Filter the array using NSPredicate NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(%K == %@)", @"venue name", @"starbucks"]; self.filteredResults = [[eventFromCloud filteredArrayUsingPredicate:predicate] mutableCopy]; searchBar.text = nil; self.arrayFromCloud = nil; eventFromCloud = nil; self.filteredResults = nil; }