icloud归档文件夹里也缺失文件怎么办?我把iCloud关了之后然后想把文件都拖回到桌面

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了icloud归档文件夹里也缺失文件怎么办?我把iCloud关了之后然后想把文件都拖回到桌面相关的知识,希望对你有一定的参考价值。

我查了文件都在一个叫归档文件夹里,但是我把原来文件夹都点开查看发现有些文件夹里的内容有丢失,可是我并没有删除啊,这怎么解决呀?求大神!能不能找到,好急!!!万分感谢!

参考技术A 有这样这样那样那样然后这样 参考技术B 所以朋友你最后怎么样了T T我也遇到这问题了 妈呀要疯了!跪求大神解答T T!!!!!!

从 iCloud 文件中取消归档对象时出错

【中文标题】从 iCloud 文件中取消归档对象时出错【英文标题】:Error when unarchiving objects from iCloud file 【发布时间】:2015-11-30 12:52:56 【问题描述】:

我有两个不同的应用程序(一个用 Objective-C 编写,一个用 Swift 编写)共享一些数据。我决定通过 iCloud 进行同步。要同步的项目被打包在一个数组中,然后保存到一个文件中。同步 Objective-C 应用程序时,一切都按预期工作,但是当我尝试在 Swift 应用程序中下载文件时出现以下错误:

由于未捕获的异常'NSInvalidUnarchiveOperationException'而终止应用程序,原因:'*** -[NSKeyedUnarchiver decodeObjectForKey:]:无法解码类(收藏夹)对象的键(NS.objects);该类可以在源代码或未链接的库中定义'

这里有两个Favourite 类:

目标 C:

@interface Favourite : NSObject

@property(retain,nonatomic) NSString* mArtikeltext;
@property(retain,nonatomic) NSString* mRid;

-(instancetype) initWithObject:(NSMutableDictionary*) object;

@end

.m:

@implementation Favourite


-(instancetype) initWithObject:(NSMutableDictionary *)object
    self = [super init];
    if(self)
        self.mArtikeltext = [object valueForKey:@"mArtikeltext"];
        self.mRid = [object valueForKey:@"mRid"];
    
    return self;


- (void)encodeWithCoder:(NSCoder *) coder

    [coder encodeObject:self.mArtikeltext forKey:@"mArtikeltext"];
    [coder encodeObject:self.mRid forKey:@"mRid"];


- (id)initWithCoder:(NSCoder *)decoder 
    if (self = [super init]) 
        self.mArtikeltext = (NSString *)[decoder decodeObjectForKey:@"mArtikeltext"];
        self.mRid = (NSString *)[decoder decodeObjectForKey:@"mRid"];
    


    return self;


@end

斯威夫特:

class Favourite: NSObject, NSCoding 

    var mArtikeltext: String = ""
    var mRid: String = ""

    init(object: [String: AnyObject]) throws 
        super.init()
        guard case let (text as String, rid as String) = (object["mArtikelText"], object["mRid"]) else 
            throw JSONResponseError.NilResponseValue
        
        self.mArtikeltext = text
        self.mRid = rid
    

    required init?(coder aDecoder: NSCoder) 
        super.init()
        self.mArtikeltext = aDecoder.decodeObjectForKey("mArtikeltext") as! String
        self.mRid = aDecoder.decodeObjectForKey("mRid") as! String
    

    func encodeWithCoder(aCoder: NSCoder) 
        aCoder.encodeObject(self.mArtikeltext, forKey: "mArtikeltext")
        aCoder.encodeObject(self.mRid, forKey: "mRid")
    

这就是我在 Swift 中解压缩数据的方式:

let cloudFavs: [Favourite] = NSKeyedUnarchiver.unarchiveObjectWithData(data) as! [Favourite]

在 Objective-C 中:

NSArray *favs = [NSKeyedUnarchiver unarchiveObjectWithData:data];

任何想法如何修复错误?

【问题讨论】:

【参考方案1】:

好的,经过一番挖掘,我找到了答案。我必须在 swift 类中声明 Objective-C 类名,如下所示:

@objc(Favourite)
class Favourite: NSObject, NSCoding 
    // and so on..

这解决了问题。

【讨论】:

以上是关于icloud归档文件夹里也缺失文件怎么办?我把iCloud关了之后然后想把文件都拖回到桌面的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式从 icloud 获取 ics 文件?

从 iCloud 文件中取消归档对象时出错

macOS Sierra系统有几个“资源库”文件夹?分别有啥用?

跳过丢失归档进行恢复

怎么注销ipad icloud账号

苹果5s 怎么在手机上查看icloud里的照片和视频?