7

एक UITableView के साथ एक UISearchDisplayController का उपयोग करते समय मैं एक ज़ोंबी कर रहा हूँ पर एक ज़ोंबी समस्या हो रही।UISearchDisplayController

UISearchDisplayController (और देखने के बाकी) इंटरफ़ेस बिल्डर के माध्यम से सेट (स्टोरीबोर्ड xcode 5 पर और एआरसी और iOS 7 केवल का उपयोग) है।

searchDisplayController इन 2 तरीकों

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString { 
    [self filterContentForSearchText:searchString scope: 
    [[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]]; 
    return YES; 
} 

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption { 
    [self filterContentForSearchText:self.searchDisplayController.searchBar.text scope: 
    [[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:searchOption]]; 
    return YES; 
} 

उपकरण मुझे यह जानकारी दे रहा है

# Event Type ∆ RefCt RefCt Timestamp Responsible Library Responsible Caller 
0 Malloc +1 1 00:10.739.188 UIKit -[UITableView setTableHeaderBackgroundColor:] 
1 Retain +1 2 00:10.739.214 UIKit -[UIView(Internal) _addSubview:positioned:relativeTo:] 
2 Retain +1 3 00:10.739.234 UIKit -[UISearchDisplayController _configureSearchBarForTableView] 
3 Retain +1 4 00:10.739.291 UIKit -[UIView(Hierarchy) subviews] 
4 Retain +1 5 00:10.771.238 UIKit -[UIView(Hierarchy) subviews] 
5 Retain +1 6 00:10.782.890 QuartzCore -[CALayer layoutSublayers] 
6 Release -1 5 00:10.782.891 QuartzCore -[CALayer layoutSublayers] 
7 Release -1 4 00:10.792.538 QuartzCore CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) 
8 Release -1 3 00:15.446.447 UIKit -[UITableView dealloc] 
9 Release -1 2 00:15.446.661 UIKit -[UIView(Internal) _invalidateSubviewCache] 
10 Release -1 1 00:15.446.679 UIKit -[UIView(Hierarchy) removeFromSuperview] 
11 Release -1 0 00:15.446.744 UIKit -[UITableView setTableHeaderBackgroundColor:] 
12 Zombie  -1 00:15.446.765 UIKit -[UISearchDisplayController _cleanUpSearchBar] 

मैं इस

-(void)dealloc { 
    self.searchDisplayController.searchResultsTableView.delegate = nil; 
    self.searchDisplayController.delegate = nil; 
    self.searchDisplayController.searchBar.delegate = nil; 
    self.searchDisplayController.searchResultsDelegate = nil; 
    self.searchDisplayController.searchResultsDataSource = nil; 
} 
तरह dealloc विधि में UISearchDisplayController को साफ करने की कोशिश की द्वारा किया जाता है

लेकिन यह काम नहीं किया।

आप मैं गलत क्या कर रहा हूँ के किसी भी विचार है?

सहायता के लिए धन्यवाद।

उत्तर

11

मैं मुझे लगता है कि मैं इस समस्या के आसपास काम करने में सक्षम हूं। यहाँ समाधान के बारे में एक और सवाल वार्ता है:

UISearchDisplayController causes crash after viewDidUnload

तो मैं कहा:

@property (nonatomic, weak) IBOutlet UISearchBar *searchBar; 
@property (nonatomic) UISearchDisplayController *searchController; 

और फिर viewDidLoad में:

UISearchDisplayController *searchController = [[UISearchDisplayController alloc] initWithSearchBar:[self searchBar] contentsController:self]; 
[searchController setDelegate:self]; 
[searchController setSearchResultsDelegate:self]; 
[searchController setSearchResultsDataSource:self]; 
[self setSearchController:searchController]; 

और dealloc में:

[self setSearchController:nil]; 

ऐसा लगता है कि इसे हल किया गया है।

+0

धन्यवाद, यह पूरी तरह से काम करता है लेकिन मैं कबूल करता हूं कि मुझे समझ में नहीं आता क्यों। क्या आप मुझे समझा सकते हैं कि यह इस समस्या को कैसे हल करता है? धन्यवाद फिर से :) – Bou

+0

मुझे पता है तुम्हारा क्या मतलब है। मैं वास्तव में समझ में नहीं आता कि यह खुद क्यों काम करता है। मेरे आईओएस 7 इस तरह के कामकाज पिलिंग कर रहे हैं। – BenRB

+0

यहाँ एक ही ... वर्कअराउंड काम करता है, लेकिन मैं इस समस्या का कारण जानना चाहते हैं। – GxocT

1

संभवत: यह एक ज्ञात समस्या रिश्तेदार को बनाए रखा नहीं किया जा रहा searchDisplayController करने के लिए। इस प्रयास करें बढ़ाने के लिए गिनती को बनाए रखें:

ज में

:

@property (nonatomic, strong) UISearchDisplayController *searchController; 
viewDidLoad में

:

self.searchController = (__bridge UISearchDisplayController *)(CFBridgingRetain(self.searchDisplayController)); 
dealloc में

(यकीन नहीं यदि आवश्यक):

self.searchController = CFBridgingRelease((__bridge void*)(self.searchController)); 
+0

वैसे यह काम करता है जब मैं विज्ञापन रिलीज कर रहा हूं लेकिन डीबग मोड में क्रैश करता हूं। इस पर कोई विचार है कि मैं इसे कैसे ठीक कर सकता हूं? – Bou

1
- (void) viewDidDisappear:(BOOL)animated { 
    [super viewDidDisappear:animated]; 

    self.tableView = nil; 
} 
संबंधित मुद्दे