लौटाते हैं मेरे पास एक UITextField है जिसे मैं UITableViewCell
में जोड़ रहा हूं ताकि खातों की लंबी सूची के लिए खोज क्षेत्र के रूप में उपयोग किया जा सके। इस प्रकार मैं इसे जोड़ लिया है:,UITextField - प्रतिनिधियों पर क्रैश जो BOOL
@interface AccountViewController : UITableViewController <UITextFieldDelegate> {
BOOL hasSearch;
UITextField *searchField;
...
}
कार्यान्वयन में मैं:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}
if ((indexPath.section < accountsection) && (hasSearch) && (indexPath.row == 0))
{
// Search
if (!searchField)
{
searchField = [[UITextField alloc] initWithFrame:CGRectMake(20, 10, cell.frame.size.width - 40, 25)];
[searchField setEnabled:YES];
searchField.placeholder = NSLocalizedString(@"Search", @"search");
searchField.keyboardType = UIKeyboardTypeDefault;
searchField.returnKeyType = UIReturnKeySearch;
searchField.autocorrectionType = UITextAutocorrectionTypeNo;
searchField.clearButtonMode = UITextFieldViewModeAlways;
searchField.delegate = self;
[cell addSubview:searchField];
[searchField release];
}
// Clean up an account label if needed
cell.accessoryType = UITableViewCellAccessoryNone;
cell.textLabel.text = @"";
cell.detailTextLabel.text = @"";
// Show the search field if it was hidden by a text label
searchField.hidden = NO;
[cell bringSubviewToFront:searchField];
}
}
पाठ क्षेत्र में संपादन का पता लगाने के लिए, मैं शीर्ष लेख और जाल निम्नलिखित प्रतिनिधि कॉल में UITextFieldDelegate
की स्थापना की है , दूसरा एक में
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
NSLog(@"Done editing");
[self filterAccountsBy:textField.text];
[textField resignFirstResponder];
return NO;
}
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSLog(@"Searching for %@", string);
[self filterAccountsBy:string];
return YES;
}
हालांकि जब तक कि मैं लौट हाँ, पाठ कभी नहीं बदलता, तब इन प्रतिनिधि तरीकों को संभालने पहले में, हाँ लौटने से मुझे प्रभावित नहीं होता है। लेकिन जब मैं यस में वापस आ जाता हूं, तो मुझे एक बुरा EXC_BAD_ACCESS
मिलता है।
मुझे अपने सेल में इस यूआईटीएक्स्टफिल्ड को जोड़ने के मैनुअल में कुछ याद आना चाहिए, लेकिन मैं यह नहीं समझ सकता कि यह क्या है ... क्या कोई सहायता कर सकता है?
बहुत धन्यवाद।
संपादित करें: के रूप में नीचे का सुझाव दिया, मैंने टिप्पणी की बाहर filterAccounts फोन और मेरे ऐप अब नहीं रह दुर्घटनाओं। इस विधि के लिए पूर्ण कोड यहां दिया गया है:
- (void)filterAccountsBy:(NSString *)filterstring
{
[accounts removeAllObjects];
if (([filterstring length] == 0) && (!isChooser) && (![vpmsConn isDomainLogon])) {
[accounts addObject:[[vpmsConn accounts] objectAtIndex:0]];
}
if ([filterstring length] == 0) {
[accounts addObjectsFromArray:[cache accounts]];
} else {
for (AccountItem *ac in [cache accounts])
{
BOOL found = NO;
// Name search
if ([[ac.clientName uppercaseString] rangeOfString:[filterstring uppercaseString]].location != NSNotFound) {
found = YES;
}
//more similar searches
if (found) {
[accounts addObject:ac];
}
}
}
[self.tableView reloadData];
}
हालांकि मैं थोड़ा उलझन में हूं। जब मैं textFieldShouldReturn का उपयोग करके इस सूची को फ़िल्टर करता हूं और फिर NO वापस करता हूं, तो यह ठीक से फ़िल्टर करता है और क्रैश नहीं होता है। इन तरीकों में से किसी एक से YES को वापस करने के बारे में कुछ करने के बाद मैंने फ़िल्टर किए जाने के बाद दुर्घटना का कारण बनता है। अगर मैंने बिल्कुल फ़िल्टर नहीं किया है, तो हाँ वापस लौटना कोई समस्या नहीं है।
मुझे बताएं कि कोई अन्य कोड है जो मुझे पोस्ट करना चाहिए।
'फ़िल्टरअकाउंट्सबी:' क्या है? यदि आप इसे टिप्पणी करते हैं तो क्या यह दुर्घटनाग्रस्त हो जाता है? – albertamg
वह विधि केवल प्रदान किए गए पाठ द्वारा खातों को फ़िल्टर करती है; यह मूल रूप से NSMutableArray के लिए निम्न कार्य करता है: सभी ऑब्जेक्ट्स को हटाएं, फिर नए को वापस जोड़ें, फिर तालिकादृश्य पर reloadData को कॉल करें जो उस सरणी को अपने डेटा स्रोत के रूप में उपयोग करता है। – hocker
हालांकि, जैसा कि आप अनुमान लगाते हैं, यह वास्तव में क्रैश होता है जब विधि सक्षम होती है और जब इसे टिप्पणी नहीं की जाती है। जो मुझे आश्चर्यचकित करता है कि यह विधि गलत क्या कर रही है। मैं ऊपर पूरा विधि कोड पोस्ट करूंगा। – hocker