如何使用NSUserDefaults保存和检索数据

3
我有100个视频的数据在我的应用程序中。当每个视频暂停或停止播放时,我需要记录所有视频的播放时间,使用NSUserDefaults存储。如何实现这一点?
我尝试过以下方法。对于显示停止持续时间,它可以正常工作,但我需要将停止、暂停和完整视频持续时间保存在单个键值引用中,例如数组或字典。
-(void) moviePlayerPlaybackStateDidChange:(NSNotification*)notification {

    NSLog(@"playbackDidChanged");
    moviePlayer = notification.object;
    MPMoviePlaybackState playbackState = moviePlayer.playbackState;
    if(playbackState == MPMoviePlaybackStateStopped) {
        NSLog(@"MPMoviePlaybackStateStopped at %f while the full length is %f", moviePlayer.currentPlaybackTime, moviePlayer.duration);
        NSLog(@"video title %@",videoTitle);
        [[NSUserDefaults standardUserDefaults] setDouble:moviePlayer.currentPlaybackTime forKey:videoTitle];
        [[NSUserDefaults standardUserDefaults] synchronize];
        NSLog(@"User default value : %@", [[NSUserDefaults standardUserDefaults] objectForKey:videoTitle]); 
    } else if(playbackState == MPMoviePlaybackStatePlaying) {
        NSLog(@"MPMoviePlaybackStatePlaying");
    } else if(playbackState == MPMoviePlaybackStatePaused) {
        NSLog(@"MPMoviePlaybackStatePaused : %f",moviePlayer.currentPlaybackTime);
        [[NSUserDefaults standardUserDefaults]setDouble:moviePlayer.currentPlaybackTime forKey:videoTitle];
    } 
}

1
为什么不为每个videoTitle键存储一个NSDictionary,而不是一个double,即使用setObject:forKey:而不是setDouble:forKey:,并在其中存储您想要的所有信息。(请注意,个人认为像这样污染NSUserDefaults是不理想的,我会使用另一个类来完成这样的操作)。 - mattjgalloway
我会将它存储为字典,而不是单独的值。 - Bill Burgess
1个回答

1
其实,当我考虑到这一点时,如果您知道每个视频的位置,并且决定将这些值添加到NSUserDefaults中,那么我会将所有内容存储在一个字典数组中。然后,您只需要将一个条目添加到默认设置中,而不是100个条目。并且应该很容易确定您需要哪个。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接