2010-06-09 22 views
0

我需要知道如何完成- (void)的所有進程(加載),如果可能的話。找出何時完成(void)中的所有進程?

爲什麼?我正在加載UITableView的數據,我需要知道何時可以用UITableView替換視圖,何時可以開始創建單元格。

這是我的代碼:

- (void) reloadData { 
    NSAutoreleasePool *releasePool = [[NSAutoreleasePool alloc] init]; 

    NSLog(@"Reloading data."); 
    NSURL *urlPosts = [NSURL URLWithString:[NSString stringWithFormat:@"%@", URL]]; 
    NSError *lookupError = nil; 
    NSString *data = [[NSString alloc] initWithContentsOfURL:urlPosts encoding:NSUTF8StringEncoding error:&lookupError]; 
    postsData = [data componentsSeparatedByString:@"~"]; 
    [data release], data = nil; 
    urlPosts = nil; 

    self.numberOfPosts = [[postsData objectAtIndex:0] intValue]; 
    self.postsArrayID = [[postsData objectAtIndex:1] componentsSeparatedByString:@"#"]; 
    self.postsArrayDate = [[postsData objectAtIndex:2] componentsSeparatedByString:@"#"]; 
    self.postsArrayTitle = [[postsData objectAtIndex:3] componentsSeparatedByString:@"#"]; 
    self.postsArrayComments = [[postsData objectAtIndex:4] componentsSeparatedByString:@"#"]; 
    self.postsArrayImgSrc = [[postsData objectAtIndex:5] componentsSeparatedByString:@"#"]; 


    NSMutableArray *writeToPlist = [NSMutableArray array]; 
    NSMutableArray *writeToNoImagePlist = [NSMutableArray array]; 
    NSMutableArray *imagesStored = [NSMutableArray arrayWithContentsOfFile:[rootPath stringByAppendingPathComponent:@"imagesStored.plist"]]; 
    int loop = 0; 
    for (NSString *postID in postsArrayID) { 
     if ([imagesStored containsObject:[NSString stringWithFormat:@"%@.png", postID]]){ 
      NSLog(@"Allready stored, jump to next. ID: %@", postID); 
      continue; 
     } 
     NSLog(@"%@.png", postID); 

     NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:[postsArrayImgSrc objectAtIndex:loop]]]; 

     // If image contains anything, set cellImage to image. If image is empty, try one more time or use noImage.png, set in IB 
     if (imageData == nil){ 
      NSLog(@"imageData is empty before trying .jpeg"); 

      // If image == nil, try to replace .jpg with .jpeg, and if that worked, set cellImage to that image. If that is also nil, use noImage.png, set in IB. 
      imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:[[postsArrayImgSrc objectAtIndex:loop] stringByReplacingOccurrencesOfString:@".jpg" withString:@".jpeg"]]]; 

     } 
     if (imageData != nil){ 
      NSLog(@"imageData is NOT empty when creating file"); 
      [fileManager createFileAtPath:[rootPath stringByAppendingPathComponent:[NSString stringWithFormat:@"images/%@.png", postID]] contents:imageData attributes:nil]; 
      [writeToPlist addObject:[NSString stringWithFormat:@"%@.png", postID]]; 
     } else { 
      [writeToNoImagePlist addObject:[NSString stringWithFormat:@"%@", postID]]; 

     } 
     imageData = nil; 

     loop++; 

     NSLog(@"imagePlist: %@\nnoImagePlist: %@", writeToPlist, writeToNoImagePlist); 
    } 
    NSMutableArray *writeToAllPlist = [NSMutableArray arrayWithArray:writeToPlist]; 

    [writeToPlist addObjectsFromArray:[NSArray arrayWithContentsOfFile:nowPlist]]; 

    [writeToAllPlist addObjectsFromArray:[NSArray arrayWithContentsOfFile:[rootPath stringByAppendingPathComponent:@"imagesStored.plist"]]]; 

    [writeToNoImagePlist addObjectsFromArray:[NSArray arrayWithContentsOfFile:[rootPath stringByAppendingPathComponent:@"noImage.plist"]]]; 

    [writeToPlist writeToFile:nowPlist atomically:YES]; 
    [writeToAllPlist writeToFile:[rootPath stringByAppendingPathComponent:@"imagesStored.plist"] atomically:YES]; 
    [writeToNoImagePlist writeToFile:[rootPath stringByAppendingPathComponent:@"noImage.plist"] atomically:YES]; 
    [releasePool release]; 
} 
+1

我從來沒有這樣做過,但只是猜測:你是否嘗試過在最後返回一個BOOL,這樣'reloadData'函數在它到達那個點時將返回TRUE?我假設(可能不正確)該設備是一次一個地按順序處理任務的,因此請試試看。 – iwasrobbed 2010-06-09 18:26:08

+0

當然,你是對的。謝謝 :) – Emil 2010-06-09 19:45:09

回答

0

這是因爲在後臺運行在選擇底部返回一個布爾值一樣簡單,而且reaload的UITableView

感謝@iWasRobbed:

我從來沒有這樣做,只是猜測:你嘗試過在最後返回BOOL,這樣當它到達該點的reloadData函數將返回TRUE?我假設(可能不正確)該設備是一次一個地按順序處理任務的,因此請試試看。

相關問題