由於運行時發送isEqualToString:到一個NSNull對象,我的程序崩潰。我找不到這個NSNull來自哪裏;我從不明確創建一個。我也無法找到誰或什麼叫isEqualToString。[NSNull isEqualToString]
我的理解是,NSNull是一個反對意見,只是爲了解決你無法將nil添加到集合的事實。我的程序確實創建了幾個自動釋放陣列;所以我猜測其中的一個以某種方式結束了NSNull。奇怪的是,這些數組都不應該包含任何NSString對象,這意味着isEqualToString:如果它發送到我的數組中的對象,會導致崩潰。
我創造這些陣列與CoreData獲取請求,並斷言:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"property.name CONTAINS[cd] %@ OR client.name CONTAINS[cd] %@", self.searchDisplayController.searchBar.text, self.searchDisplayController.searchBar.text];
request.entity = [NSEntityDescription entityForName:@"SearchIndex" inManagedObjectContext:appDelegate.rootViewController.managedObjectContext];
request.predicate = predicate;
[request setFetchLimit:0];
NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"client" ascending:YES];
NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"property" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor1, sortDescriptor2, nil];
request.sortDescriptors = sortDescriptors;
[sortDescriptors release];
[sortDescriptor1 release];
[sortDescriptor2 release];
NSError *error = nil;
NSFetchedResultsController *controller = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:appDelegate.managedObjectContext sectionNameKeyPath:@"client" cacheName:nil];
self.resultsController = controller;
[controller release];
[self.resultsController performFetch:&error];
[request release];
後來我進一步篩選這樣的fetchedResults:
id <NSFetchedResultsSectionInfo> sectionInfo = [self.resultsController.sections objectAtIndex:section];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"property.name CONTAINS[cd] %@", self.searchDisplayController.searchBar.text];
NSArray *array = [sectionInfo.objects filteredArrayUsingPredicate:predicate];
return [array valueForKey:@"property"];
可能導致NSNull怎麼在一個結束這些數組?在數組創建後查看數組,我沒有看到任何NSNull對象。還有什麼可能導致NSNull被創建,特別是在系統預期NSString的地方創建嗎?是否有使用調試器來追蹤isEqualToString:消息實際發送的位置? (如果我正在逐步完成,它發生在我的所有代碼執行完畢後,我的猜測是某個地方正在進行自動發佈)。
謝謝!
我剛剛刪除了我現有的所有數據,並開始使用2個測試條目進行更新;我仍然有同樣的問題。所以它似乎不涉及任何特定的數據。 – GendoIkari 2010-10-14 15:13:25