gpt4 book ai didi

objective-c - 方法创建一个包含 11 个对象的数组,全部超出范围,无法识别的选择器结果

转载 作者:搜寻专家 更新时间:2023-10-30 19:56:50 24 4
gpt4 key购买 nike

好的,我正在做一个简单的查找。我有一个 NSString 对象数组和一个要在数组元素中搜索的字符串。

在我尝试将匹配项添加到用于保存搜索结果的新可变数组之前,一切似乎都正常进行。 stringHolder 变量获取字符串,resultsCollectorArray 甚至获取正确数量的新元素,但每个元素都是空的并且“超出范围”。方法如下:

@implementation NSArray (checkForString)

-(NSMutableArray *) checkForString: (NSString *) matchSought
{
long unsigned numberofArrayElements;
long unsigned loop = 0;
NSRange searchResults;
NSMutableArray * resultCollectorArray = [[NSMutableSet alloc] init];
id stringHolder;

numberofArrayElements = [self count];

while (loop < numberofArrayElements) {
searchResults.length = 0;
searchResults = [[self objectAtIndex: loop] rangeOfString: matchSought options:NSCaseInsensitiveSearch];
if (searchResults.length > 0) {
stringHolder = [self objectAtIndex: loop];
[resultCollectorArray addObject: stringHolder];
}
loop++;
}

return [resultCollectorArray autorelease];

}

一旦我们回到程序的主要部分,我就会收到一个无法识别的选择器,该选择器被发送到本应接收该方法结果的可变数组。这是主要部分:

#import <Foundation/Foundation.h>
#import "LookupInArray.h"

int main (int argc, const char * argv[])
{

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *testString = [[NSString alloc] initWithString: @"ab"];
NSMutableString * resultString = [[NSString alloc] init];
NSArray * theArray = [[NSArray alloc] initWithObjects: ..., nil]; // Actual code has the objects
NSMutableArray *resultArray = [[NSMutableArray alloc] init];

NSUInteger arrayCount = 0;
unsigned long loops = 0;


resultArray = [theArray checkForString: testString];
arrayCount = [resultArray count];

while (loops < arrayCount){
resultString = [resultArray objectAtIndex: loops]; // Here's where we get the unrecognized selector.
NSLog(@"%@", resultString);
loops++;
}


[pool drain]; // Also, I'll release the objects later. I just want to get what's above working first.
return 0;
}

我已经搜索了其他答案(已经搜索了几个小时),但没有看到任何可以解决问题的答案。

我们将不胜感激任何帮助。

提前致谢。

最佳答案

NSMutableArray * resultCollectorArray = [[NSMutableSet alloc] init]; 太不正确了。您正在创建一个可变集并将其分配给一个可变数组。

您得到无法识别的选择器,因为 objectAtIndex: 不是 NSMutableSet 的有效选择器。发表声明,

NSMutableArray * resultCollectorArray = [[NSMutableArray alloc] init];

更好的方法

NSArray * filteredArray = [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF contains[cd] %@", searchString]];

您可以使用谓词直接过滤数组。这样您只需一步即可完成此操作。 :)

关于objective-c - 方法创建一个包含 11 个对象的数组,全部超出范围,无法识别的选择器结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6320006/

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