2015-08-31 1 views
1

Я запутался и, возможно, пропустил что-то простое, но я не могу его найти.Замена происхождений строк в NSMutableArray работает только один раз

Я сделаю эту проблему теоретической, потому что я сделал тест и до сих пор не могу заставить его работать с урезанным кодом. Я использую 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.

Любые идеи?

+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); 
+0

Shoaib, теперь работает как шарм. Ваш код был на 100% точным. Благодаря! –