这种情况只有在我第一次运行应用程序时才会发生,即便如此,当我尝试重新创建调试时,大部分时间它都能正常运行。
我在indexPath.row
选择了一首歌,所有内容都正确记录,除了没有调用segue。
致电didSelectRowAtIndexPath
,但未致电prepareForSegue
。
所有东西都是正确的,因为如果我再次尝试它会完美地工作,didSelectRowAtIndexPath
和prepareForSegue
都会被调用。 (我只是使用didSelectRowAtIndexPath
进行调试来记录我没有得到nil数据。)
有没有人碰到这个,或者有任何想法如何调试?谢谢!
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
MPMediaItem *selectedItem = [[albumsArrayForTVC objectAtIndex:indexPath.section] representativeItem];
NSString *albumDetailTitle = [selectedItem valueForProperty:MPMediaItemPropertyAlbumTitle];
MPMediaQuery *tempAlbumMPMediaQuery = [MPMediaQuery songsQuery];
MPMediaPropertyPredicate *albumPredicate = [MPMediaPropertyPredicate predicateWithValue: albumDetailTitle forProperty: MPMediaItemPropertyAlbumTitle];
[tempAlbumMPMediaQuery addFilterPredicate:albumPredicate];
NSArray *albumTracksArray = [tempAlbumMPMediaQuery items];
MPMediaItem *rowItemSong = [[albumTracksArray objectAtIndex:indexPath.row] representativeItem];
NSLog(@"track: %@", rowItemSong);
NSString *song = [rowItemSong valueForProperty:MPMediaItemPropertyTitle];
NSLog(@"track name: %@", song);
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if([segue.identifier isEqualToString:@"nowPlaying"]){
// send to now playing
NSUInteger selectedSection = [[self.tableView indexPathForSelectedRow] section];
NSUInteger selectedIndex = [[self.tableView indexPathForSelectedRow] row];
NSArray *albumTracksArray = [self albumTracksForSegue:[[albumsArrayForTVC objectAtIndex:selectedSection] representativeItem]];
MPMediaItem *rowItemSong = [[albumTracksArray objectAtIndex:selectedIndex] representativeItem];
MPMusicPlayerController *musicPlayer = [MPMusicPlayerController systemMusicPlayer];
[musicPlayer setQueueWithItemCollection:[MPMediaItemCollection collectionWithItems:albumTracksArray]];
[musicPlayer setNowPlayingItem:rowItemSong];
[musicPlayer play];
NSLog(@"Row Item Song: %@", rowItemSong);
}
}
这是一个奇怪的,因为它不是我每次都可以重新创建的东西,这就是为什么我更难以弄清楚这里发生了什么,是否是系统音乐播放器的东西或者是否是我的东西代码等
答案 0 :(得分:2)
首先,永远不要使用UITableViewCell
链接您的segues。如果要从UITableViewController
转移到另一个控制器,请使用控制器链接segue。按控制 - 将控制器顶部的黄色圆圈拖动到要转移到的控制器,并为其指定一个标识符。
其次,在您的didSelectRowAtIndexPath
方法中,使用您给定的标识符调用函数performSegueWithIdentifire
以转到另一个控制器。
希望这会有所帮助。 :)
答案 1 :(得分:1)
在[self performSegueWithIdentifier:@"YourSegueIdentifier" sender:nil];
方法中致电didSelectRowAtIndexPath:
。请注意,didSelectRowAtIndexPath:
和prepareForSegue:
都是UIViewController
而非UITableViewCell
的方法。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//If you have only one segue then do just this else add your if condition for different segues
[self performSegueWithIdentifier:@"YourSegueIdentifier" sender:nil];
}