gpt4 book ai didi

iphone - UITextField - 返回 BOOL 的代表崩溃

转载 作者:可可西里 更新时间:2023-11-01 05:00:22 24 4
gpt4 key购买 nike

我有一个 UITextField,我正在将其添加到 UITableViewCell 以用作一长串帐户的搜索字段。我添加如下:

- (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];
}
}

为了检测对文本字段的编辑,我在 header 中设置了 UITextFieldDelegate 并捕获以下委托(delegate)调用:

@interface AccountViewController : UITableViewController <UITextFieldDelegate> {
BOOL hasSearch;
UITextField *searchField;
...
}

在实现中,我然后处理这些委托(delegate)方法:

- (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;
}

但是在第二个中,除非我返回 YES,否则文本永远不会改变;在第一个中,返回 YES 似乎对我没有影响。但是当我在任何一个中返回 YES 时,我都会得到一个讨厌的 EXC_BAD_ACCESS

在手动将此 UITextField 添加到我的单元格中时,我一定遗漏了一些东西,但我无法弄清楚它是什么......任何人都可以提供帮助吗?

非常感谢。


编辑:如下所示,我注释掉了 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 都会导致我过滤后崩溃。如果我根本没有过滤,返回YES也没问题。

让我知道我是否应该发布任何其他代码。

最佳答案

我已经解决了这个问题,但我不能(由于 NDA)在这里发布答案。那些对付费 iOS 开发者计划感兴趣的人应该去 NDA 开发者论坛并搜索 UITextField EXC_BAD_ACCESS,您会找到答案...

关于iphone - UITextField - 返回 BOOL 的代表崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6654191/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com