2016-05-23 33 views

Trả lời

20

Để xóa hoàn toàn tệp Realm khỏi đĩa và bắt đầu từ đầu, chỉ cần sử dụng NSFileManager để xóa thủ công.

Ví dụ, để xóa các tập tin Realm mặc định:

NSFileManager.defaultManager().removeItemAtURL(Realm.Configuration.defaultConfiguration.fileURL!) 

Nếu bạn muốn giữ các tập tin Realm, nhưng hoàn toàn trống rỗng, nó của các đối tượng, bạn có thể gọi deleteAll() để làm như vậy:

let realm = try! Realm() 
try! realm.write { 
    realm.deleteAll() 
} 

Cập nhật: Tôi cảm thấy mình đã bỏ qua đề cập đến điều này trong câu trả lời ban đầu của mình. Nếu bạn chọn xóa tệp Realm khỏi đĩa, bạn phải làm như vậy trước khi mở nó trên bất kỳ chuỗi nào trong ứng dụng của mình. Khi nó được mở ra, Realm sẽ lưu trong bộ nhớ cache một tham chiếu đến nó, nó sẽ không được phát hành ngay cả khi tập tin bị xóa.

Nếu bạn hoàn toàn cần mở tệp Realm để kiểm tra nội dung của nó trước khi xóa, bạn có thể đính kèm nó trong một autoreleasepool để thực hiện việc này.

objc:

@try { 
    [RLMRealm defaultRealm]; 
} 
@catch(...) { 
    NSURL *rurl = [RLMRealmConfiguration defaultConfiguration].fileURL; 
    // blow the database clean 
    NSError *error = nil; 
    [[NSFileManager defaultManager] removeItemAtURL:rurl error:&error]; 
    if(error) { 
     NSLog(@"error %@ removing realm db", error); 
    } else { 
     NSLog(@"removed realm db successfully"); 
    } 
} 
+0

Câu trả lời hay, Tim. Chúng tôi có thể sao chép một vài bản ghi từ db cũ sang db mới (mà chúng tôi muốn người dùng sử dụng) trước khi xóa không? –

+0

@ChanchalRaj Cảm ơn! Hmm, vâng, bạn có thể dễ dàng sao chép các giá trị giữa Realms, nhưng trong trường hợp này, điều đó có nghĩa là bạn phải gác vào Realm cũ lâu hơn một chút để sao chép dữ liệu sang một cái mới. Tôi có thể khuyên bạn nên tiết kiệm các lĩnh vực mới đến một vị trí khác nhau, và một khi bạn đã hoàn thành sao chép dữ liệu, xóa các lĩnh vực cũ và thay thế nó bằng cái mới. Đảm bảo thực hiện tất cả điều này trong '@ autoreleasepool' để tất cả các tham chiếu đến Vương quốc cũ được phát hành trước khi bạn xóa nó. :) – TiM

+3

** Swift 3: ** 'thử? FileManager.default.removeItem (tại: Realm.Configuration.defaultConfiguration.fileURL!) ' –

0

Các bạn đã thử

let realm = try! Realm() 
    realm.deleteAllObjects() 

Bạn cũng có thể thử xóa các lĩnh vực tắt thiết bị bằng cách cắm nó vào máy tính, sẽ Xcode và sau đó Devices, và sau đó tìm kiếm các lĩnh vực hiện có và xóa nó.

1

Trong khi các ý kiến ​​khác là đúng, bạn thực sự cần xem xét: https://realm.io/docs/swift/latest/#migrations

Nó đưa ra một lời giải thích siêu rõ ràng về cách thực hiện di dân, và nó thực sự đơn giản, và xa tốt hơn xóa tất cả mọi thứ nếu nó có thể được giúp đỡ.

Các vấn đề liên quan