iOS   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了iphone – 在NSUserDefaults中保存ALAsset URL大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

嗨,我的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/
@H_616_10@
嗨,我的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"];
}

大佬总结

以上是大佬教程为你收集整理的iphone – 在NSUserDefaults中保存ALAsset URL全部内容,希望文章能够帮你解决iphone – 在NSUserDefaults中保存ALAsset URL所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。