iphone – 在NSUserDefaults中保存ALAsset URL
发布时间:2020-12-14 17:39:21 所属栏目:百科 来源:网络整理
导读:嗨,我的ALAsset URL保存在NSMutableArray中, "ALAsset - Type:Photo,URLs:assets-library://asset/asset.JPG?id=119A0D2D-C267-4B69-A200-59890B2B0FE5ex??t=JPG","ALAsset - Type:Photo,URLs:assets-library://asset/asset.JPG?id=92A7A24F-D54B-496E-B250-
嗨,我的ALAsset URL保存在NSMutableArray中,
"ALAsset - Type:Photo,URLs:assets-library://asset/asset.JPG?id=119A0D2D-C267-4B69-A200-59890B2B0FE5&ex??t=JPG","ALAsset - Type:Photo,URLs:assets-library://asset/asset.JPG?id=92A7A24F-D54B-496E-B250-542BBE37BE8C&ex??t=JPG",URLs:assets-library://asset/asset.JPG?id=77AC7205-68E6-4062-B80C-FC288DF96F24&ex??t=JPG 我无法在NSUserDefaults中保存NSMutableArray,因为它有错误请注意,属性列表中的字典和数组也必须只包含属性值. - (void)encodeWithCoder:(NSCoder *)encoder { //Encode properties,other class variables,etc [encoder encodeObject:self.selectedPhotos forKey:@"selectedPhotos"]; } - (id)initWithCoder:(NSCoder *)decoder { if((self = [super init])) { //decode properties,other class vars self.selectedPhotos = [decoder decodeObjectForKey:@"selectedPhotos"]; } return self; } 然后使用以下代码保存并检索它: - (void)saveCustomObject:(MyCustomObject *)obj { NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:obj]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:myEncodedObject forKey:@"myEncodedObjectKey"]; } - (MyCustomObject *)loadCustomObjectWithKey:(NSString *)key { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSData *myEncodedObject = [defaults objectForKey:key]; MyCustomObject *obj = (MyCustomObject *)[NSKeyedUnarchiver unarchiveObjectWithData: myEncodedObject]; return obj; } 但我不知何故得到它,仍然在我的代码崩溃.不知道怎么做.我无法将其保存在NSUserDefaults中.希望有人帮忙.真的有这个问题了一段时间.希望有人引导我走正确的路径,从NSUserDefaults以正确的方式保存和检索它.然后回到NSMutableArray. 解决方法
NSUserDefaults仅将一组受限制的类作为对象.请参阅
documentation.您必须注意在字典中存储这些类型的值(NSData,NSString,NSNumber,NSDate,NSArray或NSDictionary,当然它还是递归应用).
要将URL存储在NSUserDefaults中,请将它们存储为字符串,然后将其作为URL读回.如果您需要使用当前格式的字典,则可能必须在保存之前对其进行转换. - (void) saveMyUrls { NSMutableArray* urls = [NSMutableArray arrayWithCapacity:self.myUrls.count]; for(NSURL* url in self.myUrls) { [urls addObject:[url absoluteString]]; } [[NSUserDefaults standardUserDefaults] setObject:urls forKey:@"myUrls"]; } - (void) loadUrls { NSArray* urls = [[NSUserDefaults standardUserDefaults] objectForKey:@"myUrls"]; self.myUrls = [NSMutableArray arrayWithCapacity:urls.count]; for(NSString* urlString in urls) { [self.myUrls addObject:[NSURL URLWithString:urlString]]; } [[NSUserDefaults standardUserDefaults] setObject:urls forKey:@"myUrls"]; } 如果您需要保存更多信息而不仅仅是URL,让我们说一个用户指定的标签,您可以将对象保存为NSDictionary,例如 - (void) saveMyUrlsWithLabels { NSMutableArray* objs = [NSMutableArray arrayWithCapacity:self.myObjects.count]; for(MyObject* obj in self.myObjects) { [objs addObject:[NSDictionary dictionaryWithKeys:@"url",@"label" forObjects:obj.url.absoluteString,obj.userSpecifiedLabel]; } [[NSUserDefaults standardUserDefaults] setObject:objs forKey:@"myObjects"]; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Sqlite3支持的数据类型 日期函数 Sqlite3 函数
- c – decltype(void())和decltype(void {})之间的差异
- sqlite 导入txt
- ruby-on-rails – Rails SQL正则表达式
- Androidx学习笔记(19)-- SQLite 简介
- Backup Exec 16中配置Oracle备份
- c# – 数据库连接失败(System.Data.Sqlclient.SqlException
- 什么是依赖注入
- ruby – 理解`load`,`require`和`require_relative`之间的区
- ruby-on-rails – Rails – 是否可以为外部图像提供本地URL