1

Может ли кто-нибудь сказать мне, почему мой код не показывает никаких результатов в моем представлении таблицы. Вот мой код. Я уже пытался изменить @ "@" на indexPath.row без везения. Я ищу любой ответ в правильном направлении. Я довольно новичок в xcode и объективном-c. Я бы очень признателен за любую помощь.Array не отображается в виде таблицы

-(void)waitAndFillPlaylistPool { 
    // arrPlaylist -> mutablearray which stores the value of loaded playlist in order to use it later 


    [SPAsyncLoading waitUntilLoaded:[SPSession sharedSession] timeout:kSPAsyncLoadingDefaultTimeout then:^(NSArray *loadedession, NSArray *notLoadedSession) 
    { 
     // The session is logged in and loaded — now wait for the userPlaylists to load. 
     NSLog(@"[%@ %@]: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), @"Session loaded."); 

     [SPAsyncLoading waitUntilLoaded:[SPSession sharedSession].userPlaylists timeout:kSPAsyncLoadingDefaultTimeout then:^(NSArray *loadedContainers, NSArray *notLoadedContainers) 
      { 
       // User playlists are loaded — wait for playlists to load their metadata. 
       NSLog(@"[%@ %@]: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), @"Container loaded."); 

       NSMutableArray *playlists = [NSMutableArray array]; 
       [playlists addObject:[SPSession sharedSession].starredPlaylist]; 
       [playlists addObject:[SPSession sharedSession].inboxPlaylist]; 
       [playlists addObjectsFromArray:[SPSession sharedSession].userPlaylists.flattenedPlaylists]; 

       [SPAsyncLoading waitUntilLoaded:playlists timeout:kSPAsyncLoadingDefaultTimeout then:^(NSArray *loadedPlaylists, NSArray *notLoadedPlaylists) 
       { 
        // All of our playlists have loaded their metadata — wait for all tracks to load their metadata. 
        NSLog(@"[%@ %@]: %@ of %@ playlists loaded.", NSStringFromClass([self class]), NSStringFromSelector(_cmd), 
         [NSNumber numberWithInteger:loadedPlaylists.count], [NSNumber numberWithInteger:loadedPlaylists.count + notLoadedPlaylists.count]); 
        NSLog(@"loadedPlaylists >> %@",loadedPlaylists); 

        arrPlaylist = [[NSMutableArray alloc] initWithArray:loadedPlaylists]; 
        NSLog(@"arrPlaylist >> %@",arrPlaylist); 

       }]; 
      }]; 
    }]; 
} 


- (NSInteger) tableView:(UITableView *) tableView numberOfRowsInSection:(NSInteger)section { 

    return [arrPlaylist count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

     cell.textLabel.text = [arrPlaylist objectAtIndex:indexPath.row]; 
     cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 


    return cell; 
} 
+0

Вы уверены, что ваш код работает успешно, без сбоев на [arrPlaylist objectAtIndex: @ "% @"]; эта линия? – Tirth

+0

Где код перезагрузки UITableView после загрузки всех данных массива? Вы уверены, что правильно настроили UITableViewDelegate и UITableViewDataSource? – Tirth

+0

Вы неверно ссылаетесь на значение массива в следующей строке кода cell.textLabel.text = [arrPlaylist objectAtIndex: @ "% @"], поскольку вы не указываете, какой индекс следует принимать из массива, он должен быть ячейкой. textLabel.text = [arrPlaylist objectAtIndex: indexPath.row]. – ldindu

ответ

0

Трудно сказать, что вы делаете в методе, waitAndFillPlaylistPool, но если это принимает любое время, чтобы получить эти данные, то вам необходимо позвонить reloadData на вашем представлении таблицы ([self.tableView reloadData ]) как последняя строка в этом методе (или когда какой-либо метод async возвращает - я не могу сказать, где это может быть в вашем коде).

+0

GREAT ... Я создал reloadData в конце моего метода. Я чем-то создал простейшую розетку своего табличного наама, и действительно, это сработало ... возникла проблема с возвратом имени, но мне удалось изменить код, обратившись к имени NSString. Большое спасибо всем вам, это был мой первый раз, используя stackoverflow, и ваша помощь была отличной. ВСЕ ВАС .... Спасибо ... Я все еще удивляюсь, почему это необходимо для использования reloadData. –

+0

@DanhiBus, представление таблицы вызывает его методы сразу после запуска метода viewDidLoad контроллера представления (но до viewWillAppear), поэтому, если у вас есть асинхронный процесс, который получает данные, необходимые для таблицы, таблица будет уже вызвана numberOfRows (которая будет 0, если ваш массив еще не заполнен). Таким образом, вам нужно вызвать reloadData после вашего асинхронного процесса, что заставляет табличное представление снова ссылаться на свои методы источника данных. Если мой ответ помог решить вашу проблему, вы должны принять его, нажав на стрелку. – rdelmar