iOS最新归档解档(2022)

494 阅读1分钟

OC版本:

  • (void)WriteData{

    

    NSString *path = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).firstObject;

    NSString *file =[path stringByAppendingPathComponent:@"User_C"];

    if ( @available(iOS 11.0, *)) {

        

        NSError *error = nil;

        

        NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self requiringSecureCoding:YES error:&error];

        

        if (error) {

            

            NSLog(@"模型转Data失败:%@",error);

        

        }else{

            

            BOOL success  = [data writeToFile:file atomically:YES];

            

            if (success) {

                

                NSLog(@"写入成功");

                

            }else{

                

                NSLog(@"写入失败");

                

            }

            

            

        }

    } else {

        

        BOOL savesuccess  =  [NSKeyedArchiver archiveRootObject:self toFile:file];

       

           if (savesuccess) {

       

               NSLog(@"存放成功");

       

           }else{

       

               NSLog(@"存放失败");

       

           }

    }

    

    

}

\

\

  • (instancetype)ReadData{

    NSString *path = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).firstObject;

    NSString *file =[path stringByAppendingPathComponent:@"User_C"];

      if ( @available(iOS 11.0, *)) {

        

        NSError *error = nil;

        

        NSData *data = [[NSData alloc]initWithContentsOfFile:file];

        

         User *user = [NSKeyedUnarchiver unarchivedObjectOfClass:[User class] fromData:data error:&error];

        

        if (error||!user) {

            user = [[User alloc]init];

            [user initData];

            [user WriteData];

        }else{

            NSLog(@"数据读取成功");

        }

        

        return user;

        

    } else {

        

       User *user = [NSKeyedUnarchiver unarchiveObjectWithFile:file];

        

        if (!user) {

            

            user = [[User alloc]init];

            [user initData];

        }

        

        return user;

    }

}

Swift版本:

func WriteData() -> Void {

        

        let file : String = NSSearchPathForDirectoriesInDomains(.libraryDirectory, .userDomainMask, true).first ?? ""

        

        let filePath = (file as NSString).appendingPathComponent("User_C")

        

        print("用户信息路径:(filePath)")

        

        if #available(iOS 11.0, *) {

            do {

                

              let data =  try  NSKeyedArchiver.archivedData(withRootObject: self, requiringSecureCoding: true)

                

                do {

                    _ = try data.write(to: URL.init(fileURLWithPath: filePath))

                    

                    print("写入成功")

                    

                } catch  {

                    

                    print("data写入本地失败: (error)")

                    

                }

                

            } catch {

                

                print("模型转Data失败:(error)")

                

            }

          

            

        } else {

            

            let success:Bool = NSKeyedArchiver.archiveRootObject(self, toFile:filePath)

            

            if success {

                

                print("写入成功")

                

            }else{

                

                print("写入失败")

                

            }

      }

}

    

    

  class func ReadData() -> User {

        

      let file : String = NSSearchPathForDirectoriesInDomains(.libraryDirectory, .userDomainMask, true).first ?? ""

      

      let filepath = (file as NSString).appendingPathComponent("User_C")

      

      print("用户信息路径:(filepath)")

        

      let user: User

      

      do {

          

          if #available(iOS 11.0, *) {

              

              let data: Data = try NSData.init(contentsOfFile: filepath) as Data

              

              user  =  try NSKeyedUnarchiver.unarchivedObject(ofClass: User.self, from: data) ?? User.init()

              

          } else {

             

              user = NSKeyedUnarchiver.unarchiveObject(withFile: filepath) as? User ?? User.init()

          }

          

          print("读取成功")

      } catch  {

          

          print("Data转模型失败:(error)")

          

          user = User.init()

          

      }

      

      return user

      

    }