Ios 如何从NSUserDefault检索数据?

Ios 如何从NSUserDefault检索数据?,ios,swift,audio,nsuserdefaults,mpmediaitemcollection,Ios,Swift,Audio,Nsuserdefaults,Mpmediaitemcollection,目前,我尝试制作一个音乐播放列表应用程序。我尝试从NSUserDefault保存和检索播放列表数据。我在保存数据时没有问题,但在检索数据时出错 我得到: 由于未捕获的异常“MPMediaItemCollectionInItemException”而终止应用程序,原因:'-init不受支持,请使用-initWithItems: 我一直在跟踪他的答案,但我试着用swift写下来 以下是我的保存功能: func savePlaylist(var mediaItemCollection: MPMedia

目前,我尝试制作一个音乐播放列表应用程序。我尝试从NSUserDefault保存和检索播放列表数据。我在保存数据时没有问题,但在检索数据时出错

我得到:

由于未捕获的异常“MPMediaItemCollectionInItemException”而终止应用程序,原因:'-init不受支持,请使用-initWithItems:

我一直在跟踪他的答案,但我试着用swift写下来

以下是我的保存功能:

func savePlaylist(var mediaItemCollection: MPMediaItemCollection){

    var items: NSArray = mediaItemCollection.items

    var listToSave: NSMutableArray = NSMutableArray()

    for song in items{

        var persistentId: AnyObject! = song.valueForProperty(MPMediaItemPropertyPersistentID)

        listToSave.addObject(persistentId)

    }

    var data: NSData = NSKeyedArchiver.archivedDataWithRootObject(listToSave)

    NSUserDefaults.standardUserDefaults().setObject(data, forKey: "songsList")
    NSUserDefaults.standardUserDefaults().synchronize()

}
func setupMusic(){

    if NSUserDefaults.standardUserDefaults().objectForKey("songsList") != nil{

        var theList: NSMutableArray = NSMutableArray()

        var data: NSData = (NSUserDefaults.standardUserDefaults().objectForKey("songsList") as? NSData)!

        var decodedData: NSArray  = (NSKeyedUnarchiver.unarchiveObjectWithData(data) as? NSArray)!

        theList.addObjectsFromArray(decodedData as [AnyObject])

        var allTheSongs: NSMutableArray = NSMutableArray()

        for var i = 0; i < theList.count; i++ {

            var songQuery = MPMediaQuery.songsQuery()

            var songs: NSArray = songQuery.items

            allTheSongs.addObject(songs)

        }

        var currentQueue: MPMediaItemCollection = MPMediaItemCollection()

        myMusicPlayer?.setQueueWithItemCollection(currentQueue)


    }else{
        println("fail!!!!!!!!!!!!")
    }

}
这是我的检索函数:

func savePlaylist(var mediaItemCollection: MPMediaItemCollection){

    var items: NSArray = mediaItemCollection.items

    var listToSave: NSMutableArray = NSMutableArray()

    for song in items{

        var persistentId: AnyObject! = song.valueForProperty(MPMediaItemPropertyPersistentID)

        listToSave.addObject(persistentId)

    }

    var data: NSData = NSKeyedArchiver.archivedDataWithRootObject(listToSave)

    NSUserDefaults.standardUserDefaults().setObject(data, forKey: "songsList")
    NSUserDefaults.standardUserDefaults().synchronize()

}
func setupMusic(){

    if NSUserDefaults.standardUserDefaults().objectForKey("songsList") != nil{

        var theList: NSMutableArray = NSMutableArray()

        var data: NSData = (NSUserDefaults.standardUserDefaults().objectForKey("songsList") as? NSData)!

        var decodedData: NSArray  = (NSKeyedUnarchiver.unarchiveObjectWithData(data) as? NSArray)!

        theList.addObjectsFromArray(decodedData as [AnyObject])

        var allTheSongs: NSMutableArray = NSMutableArray()

        for var i = 0; i < theList.count; i++ {

            var songQuery = MPMediaQuery.songsQuery()

            var songs: NSArray = songQuery.items

            allTheSongs.addObject(songs)

        }

        var currentQueue: MPMediaItemCollection = MPMediaItemCollection()

        myMusicPlayer?.setQueueWithItemCollection(currentQueue)


    }else{
        println("fail!!!!!!!!!!!!")
    }

}
func setupMusic(){
如果NSUserDefaults.standardUserDefaults().objectForKey(“歌曲列表”)!=nil{
变量列表:NSMutableArray=NSMutableArray()
变量数据:NSData=(NSUserDefaults.standardUserDefaults().objectForKey(“songsList”)作为?NSData)!
var decodedData:NSArray=(NSKeyedUnarchiver.unarchiveObjectWithData(data)as?NSArray)!
theList.addObjectsFromArray(将数据解码为[AnyObject])
var allTheSongs:NSMutableArray=NSMutableArray()
对于变量i=0;i

如何修复它?

这里是一个问题
var currentQueue:MPMediaItemCollection=MPMediaItemCollection()

您必须
init
带有项目

根据苹果公司的报告

初始化(项目:) 指定初始值设定项

使用媒体项数组初始化媒体项集合。 声明

迅捷的

初始化!(项目:[任何对象]!) 参数 项目

分配给媒体项目集合的项目数组

您必须使用以下项目初始化

var currentQueue: MPMediaItemCollection = MPMediaItemCollection(items:itemsArray)

我提供了一种非常简单的方法,可以访问任何类型的对象并从
NSUserDefault
中检索。 您不需要显式地使用archive和unarchive。 只需创建一个NSUserDefaults类别,如下所示

#import <Foundation/Foundation.h>
@interface NSUserDefaults (AKSNSUserDefaults)
- (void)saveCustomObject:(id<NSCoding>)object
                     key:(NSString *)key;
- (id<NSCoding>)loadCustomObjectWithKey:(NSString *)key;
@end  

@implementation NSUserDefaults (AKSNSUserDefaults)

- (void)saveCustomObject:(id<NSCoding>)object
                     key:(NSString *)key {
    NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:object];
    [self setObject:encodedObject forKey:key];
    [self synchronize];

}

- (id)loadCustomObjectWithKey:(NSString *)key {
    NSData *encodedObject = [self objectForKey:key];
    id object = [NSKeyedUnarchiver unarchiveObjectWithData:encodedObject];
    return object;
}

@end

我应该把它放在哪里!(物品:[任何物体]!)“物品雷”来自哪里?哦,好的,我知道了。感谢您的帮助如果您正在使用swift,那么您可以通过以下链接在模型中使用NSCoding