0

出于某种原因,我无法将第二条 NSLog 消息输出到控制台。一直在寻找问题,但找不到。提前致谢。

#import <Foundation/Foundation.h>

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

  @autoreleasepool {

     // Create the array of strings to devowelize and a container for new ones
    NSArray *oldStrings = [NSArray arrayWithObjects:@"Sauerkraut", @"Raygun", @"Big Nerd Ranch", @"Mississippi", nil];
    NSLog(@"old strings: %@", oldStrings);
    NSMutableArray *newStrings = [NSMutableArray array];

    // Create a list of characters that we'll remove from the string
    NSArray *vowels = [NSArray arrayWithObjects:@"a", @"e", @"i", @"o", @"u", nil];

    // Declare the block variable
    void(^devowelizer)(id, NSUInteger, BOOL *);

    // Assign a block to the variable
    devowelizer = ^(id string, NSUInteger i, BOOL *stop)
    {
      NSMutableString *newString = [NSMutableString stringWithString:string];
      // Iterate over the array of vowels, replacing occurences of each with 
      // an empty string
      for (NSString *s in vowels) {
        NSRange fullRange = NSMakeRange(0, [newString length]);
                             [newString replaceOccurrencesOfString:s 
                                                        withString:@"" 
                                                           options:NSCaseInsensitiveSearch 
                                                             range:fullRange];
                             [newStrings addObject:newString];
                             }; //End of block assignment

      // Iterate over the array with our block
      [oldStrings enumerateObjectsUsingBlock:devowelizer];
      NSLog(@"new strings: %@", newStrings);

  };
    return 0;
}
}
4

3 回答 3

2

您永远不会调用 devowelizer 块。因此,第二个 NSLog 永远无法执行。

于 2012-07-14T02:40:04.957 回答
1

您创建了一个块并将其分配给devowelizer. 看起来您已将调用放在块的该块上,但这是行不通的。

于 2012-07-14T02:40:34.523 回答
0
NSLog(@"new strings: %@", newStrings);

这条线也在块内工作。您没有调用块devowelizer ,这就是它不起作用的原因。

于 2013-06-10T06:46:32.973 回答