2010-07-23 9 views
14

Tôi không thể nhận được bất kỳ câu trả lời nào về câu hỏi trước đây (có liên quan) của tôi, vì vậy tôi tự hỏi liệu có diễn giải một chút hay không.NSKeyedUnarchiver - xóa dữ liệu được giải mã?

Tôi đang mã hóa một vài đối tượng phức tạp với NSKeyedArchiver và lưu nó vào đĩa. Này, cái gì đó như -

Class member { 
    int *id; 
    NSString *name; 
    NSMutableArray *array; 
    TempClass *object; 
} 

Chức năng Tôi đang cố gắng để xây dựng là cho người sử dụng để có thể lưu lại công việc của mình, cho phép nói rằng, trong khi tạo ra một thành viên mới và trở lại nó sau này. Khi người dùng kết thúc, anh ta nhấp vào bài đăng và dữ liệu sẽ được truyền tới một dịch vụ web. Nếu không, anh ta chỉ cần nhấp vào lưu và rời khỏi màn hình và dữ liệu được duy trì, để ứng dụng có thể tiếp tục từ thời điểm đó khi người dùng quay lại. Bây giờ, khi tôi đã đăng dữ liệu lên dịch vụ web, tôi không muốn giữ dữ liệu trong đĩa nữa và tôi thực sự không thể tìm cách xóa nó.

Hiện tại, các lớp mã hóa và giải mã của tôi hoạt động tốt. Tôi có thể sử dụng NSKeyedArchiver để lưu dữ liệu vào đĩa và lấy nó bằng NSKeyedUnarchiver. Nhưng, câu hỏi của tôi là, làm thế nào tôi có thể xóa dữ liệu mà tôi không cần nữa? Tôi có phải xóa thủ công tệp trên đĩa không? Có cách nào để có được NSKeyedUnarchiver để xóa các dữ liệu đó là nó trở về?

Xin cảm ơn,
Teja.

Trả lời

18

Một cách rất đơn giản để chỉ cần xóa nó lập trình một khi bạn đã gửi dữ liệu:

- (BOOL) deleteFile:(NSString *) pathOfFileToDelete error:(NSError *)err { 
    BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath: pathOfFileToDelete]; 
    if(exists) { 
     [[NSFileManager defaultManager]removeItemAtPath: pathOfFileToDelete error:err]; 
    } 
    return exists; 
} 
+1

Cảm ơn. Nhưng, Làm thế nào để tôi có được tên của tập tin? Nếu tôi lưu trữ nhiều đối tượng, chúng có được lưu dưới dạng nhiều tệp không? –

+0

Được rồi, nhận ra đó là một câu hỏi ngu ngốc. Tôi không viết lại mã lưu của mình để ghi vào một tệp khác cho từng tệp lưu trữ mà tôi tạo. Sau đó tôi có thể xóa chúng bất cứ khi nào tôi muốn. –

2

Đối Swift 2.0:

do { 
    try NSFileManager.defaultManager().removeItemAtPath("Your_PATH") 
} catch { 

} 
5

Đối Swift 2.0:

func deleteFile(path: String) -> Bool{ 
    let exists = NSFileManager.defaultManager().fileExistsAtPath(path) 
    if exists { 
     do { 
      try NSFileManager.defaultManager().removeItemAtPath(path) 
     }catch let error as NSError { 
      print("error: \(error.localizedDescription)") 
      return false 
     } 
    } 
    return exists 
} 
2

Ví dụ về Swift3:

do { 
try FileManager.default.removeItem(atPath: path) 
} catch { 
// catch potential error 
}