我正在尝试在NSArray类的类中创建一个方法并使用它,它测试数组中的每个对象(字符串)并返回一个包含第一个通过测试的对象的数组。
这是我定义的方法:
- (NSArray *)objectsPassingTest:(BOOL(^)(id obj, BOOL *stop))predicate
{
NSMutableArray *outputArray = [NSMutableArray array];
for (id obj in self)
{
BOOL *stop;
if (predicate(obj,stop)) {
[outputArray addObject:obj];
}
if (stop) {
break;
}
}
return [NSArray arrayWithArray:outputArray];
}
以下是我使用它的代码片段:
NSArray *inputArray = [NSArray arrayWithObjects:@"Objective - C", @"is", @"fun", nil];
NSArray *outputArray = [inputArray objectsPassingTest:^BOOL(id obj, BOOL *stop) {
if ([obj length] > 2) {
*stop = YES;
return YES;
}
else
{
return NO;
}
}];
NSLog(@"outputArray - %@",outputArray);
问题是 - 显示正确的输出后,在这种情况下,目标-c,应用程序崩溃。
如果我在某些地方做错了,有人可以建议我吗?
答案 0 :(得分:0)
如果您不想实现类似于传递测试功能的东西,您可以使用指向BOOL的指针(因为BOOL被定义为“typedef signed char BOOL”)
但您在块中设置了*stop = YES
未初始化的BOOL
指针,这会让您的应用崩溃。
一种解决方案是设置初始化BOOL值:
BOOL test = NO;
BOOL *stop = &test;
块的好指南在这里:http://cocoasamurai.blogspot.de/2009/09/guide-to-blocks-grand-central-dispatch.html