2015-01-31 3 views
0

지연 시간이 5 초 후에 버튼을 탭하면 배열의 총 값이 실행됩니다.루프의 모든 값에 대한 지연

- (IBAction)testButton:(id)sender { 
NSArray *array = [NSArray arrayWithObjects: 
         @"Hefeweizen", @"IPA", @"Pilsner", @"Stout", nil]; 


for (NSIndexPath *anIndexPath in array) { 




     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 5 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ 


      NSLog(@"INDEX PATH %@",anIndexPath); 



     }); 
} 

배열 내의 모든 값에 대해 5 초의 지연을 만드는 방법은 무엇입니까?

+0

이 스레드를 참조하십시오 : http://stackoverflow.com/questions/2232366/waiting-for-a-specified-duration-in-cocoa – Romain

+0

그 코드는 말도 안돼. 배열에 NSIndexPath 객체가 아닌 NSString 객체가 포함되어 있습니다. – gnasher729

답변

1

이 코드를 사용해보십시오. 지연이 추가되었지만 건강한 방법인지 확실하지 않습니다. 것이다)합니다 (NSLog과의 블록 있도록

당신이 배열을 반복
- (IBAction)testButton:(id)sender { 
    NSArray *array = [NSArray arrayWithObjects: 
         @"Hefeweizen", @"IPA", @"Pilsner", @"Stout", nil]; 

    int64_t delayInSeconds = 5.0; 

    for (NSIndexPath *anIndexPath in array) 
    { 

     dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 

     dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
      NSLog(@"INDEX PATH %@",anIndexPath); 
     }); 
     delayInSeconds += 5; 
    } 
} 
+0

고마워요! 정확히 내가 원했던 것. –

2

, 당신의 dispatch_after() 매우 짧은 시간에 일어날 전화 : 어쨌든, 그것은 작은 루프에 대한 문제가되지 않습니다 나중에 거의 같은 시간에 처형 될 것입니다. 이에

int64_t interval = 0; 
for (NSIndexPath *anIndexPath in array) { 
    dispatch_time_t start = DISPATCH_TIME_NOW; 
    interval += 5; 
    dispatch_after(dispatch_time(start, interval * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ 
     NSLog(@"INDEX PATH %@",anIndexPath); 
    }); 
} 

: 당신이 달성하려고하는 당신이 필요로하는 정밀, 당신은 당신이 배열을 반복 할 때 한 번에 5 초 후에 각 블록을 예약 한 간단 뭔가를 할 수 있는지에 따라

예를 들어, 첫 번째 블록은 5 초에, 두 번째 블록은 10 초에, 세 번째 블록은 15 초에 스케줄됩니다.

2

쉽게 다른 후 실행을 대기 할 수 있습니다

- (void)executeFirstInArray:(NSArray *)array { 
    NSString *firstItem = [array firstObject]; 
    array = [array subarrayWithRange:NSMakeRange(1, array.count - 1)]; 

    NSLog(@"Item: %@", firstItem); 

    if (array.count > 0) { 
     [self performSelector:_cmd withObject:array afterDelay:5.0]; 
    } 
} 

- (IBAction)testButton:(id)sender { 
    NSArray *array = [NSArray arrayWithObjects: 
        @"Hefeweizen", @"IPA", @"Pilsner", @"Stout", nil]; 

    [self performSelector:@selector(executeFirstInArray:) withObject:array afterDelay:5.0]; 
} 
관련 문제