替换NSMutableArray中的字符串出现只运行一次

时间:2015-08-31 04:33:13

标签: ios objective-c string enumeration spritebuilder

我很困惑,也许错过了一些简单的事情,但我无法找到它。

我在理论上会遇到这个问题,因为我已经完成了测试,仍然无法使用精简代码。我正在使用SpriteBuilder,但这不应该是导致问题的原因 - 我可以记录我在文本输入中得到的值,但是根本无法将该值再次输入到数组中 - 但足够的咆哮,时间对于一些代码。

Main.h

#import "Content.h"
#import "ReplaceMe.h"

@property Content *contentInstance;
@property ReplaceMe *replaceMeInstance; 

的main.m

   -(void)someFunction{
    _contentInstance = (Content*)[CCBReader load:@"ContentScene"];
  [_contentInstance.changeArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        if ([_contentInstance.base[idx] containsString:@"one"]){
            NSLog(@"I contain one!");
            NSString *replace = [_content.testArray[idx] stringByReplacingOccurrencesOfString:@"one" withString:changeTheText.string];
            [_content.testArray replaceObjectAtIndex:idx withObject:replace];
            NSLog(@"%@",_content.testArray[idx]);
        }
    }];
[_contentInstance updateLabels];
    }

Content.h

@property NSArray *base;
@property NSArray *changeArray;

Content.m

-(void)someFunction{
    _base = @[@"This is one",@"This is two",@"This is two point one"];
    _changeArray = [base mutableCopy];
}
-(void)updateLabels{
    [_changeArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        _labeler = [CCLabelTTF labelWithString:[NSString stringWithFormat:@"%@",_changeArray[idx]] fontName:@"Helvetica" fontSize:12.0f];
        }
    }];
}

ReplaceMe.h

@property CCTextField *changeTheText;
-(void)_changeTheTextSelector;

ReplaceMe.m

-(void)_changeTheTextSelector{
self.visible=NO;
}

当我打电话给MainScene的someFuction时,这个设置第一次只是花花公子 - 而且只是第一次。在第一次运行枚举后,我无法更新changeArray

我知道changeTheText正在更改,因为它会注销,但是当我记录changeArray[idx]时,它会停留在第一个changeTheText

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

尝试此操作并与您的代码进行比较。它对我来说很好;

NSArray* base = @[@"This is one",@"This is two",@"This is two point one"];
NSMutableArray *changeArray = [base mutableCopy];

[base enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    if ([obj containsString:@"one"]) {
        NSLog(@"data : %@", changeArray[idx]);
        //--
        [changeArray replaceObjectAtIndex:idx withObject:[((NSString*) obj) stringByReplacingOccurrencesOfString:@"one" withString:@""]];
    }
}];

NSLog(@"changeArray %@", changeArray);