2013-02-19 40 views
6

Tôi có một ứng dụng được định cấu hình để sử dụng iCloud. Tôi đang thêm một khóa/giá trị vào NSUbiquitousKeyValueStore và tôi có thể lấy nó như mong đợi trên tất cả các thiết bị của mình. Tuy nhiên, nếu tôi xóa dữ liệu iCloud của ứng dụng của mình khỏi trong Cài đặt, tôi hy vọng rằng tất cả dữ liệu iCloud tôi đã thêm vào NSUbiquitousKeyValueStore cũng sẽ bị xóa nhưng đây không phải là trường hợp. Tôi có thể truy xuất tất cả dữ liệu, cho dù tôi muốn iCloud đồng bộ bao lâu.Xóa dữ liệu iCloud không xóa NSUbiquitousKeyValueStore?

Tôi đã truy cập developer.icloud.com và xem dữ liệu iCloud khác của mình (Tôi cũng đang sử dụng Dữ liệu lõi qua iCloud) bị xóa đúng cách, nhưng không có thư mục nào mà NSUbiquitousKeyValueStore lưu dữ liệu của nó từ những gì tôi có thể biết.

Có ai biết nếu điều này được cho là bị xóa không? Nó có vẻ giống như một "rò rỉ bộ nhớ đám mây" nếu người dùng không thể xóa nó.

Trả lời

6

Đây là cách tôi làm điều đó:

NSUbiquitousKeyValueStore *kvStore = [NSUbiquitousKeyValueStore defaultStore]; 
NSDictionary *kvd = [kvStore dictionaryRepresentation]; 
NSArray *arr = [kvd allKeys]; 
for (int i=0; i < arr.count; i++){ 
    NSString *key = [arr objectAtIndex:i]; 
    [kvStore removeObjectForKey:key]; 
} 
+0

Cảm ơn bạn đã trả lời. Tôi không tự hỏi làm thế nào để tự xóa các giá trị - phần đó là hiển nhiên. Tôi đang cố gắng xem liệu họ có phải là cách để người dùng xóa dữ liệu này hay không. Tôi đã được keying off của một giá trị trong các cửa hàng phổ biến để nói nếu tôi đã thiết lập một cái gì đó và tôi muốn chạy lại hoạt động nếu một người dùng xóa dữ liệu iCloud của họ. Tuy nhiên, nếu người dùng có cách xóa dữ liệu của họ thì phương pháp này có thể không hoạt động. – lehn0058

+0

Ồ, được rồi.Bạn có thể sử dụng NSMetadataQuery để xác định xem tệp dữ liệu cốt lõi có còn ở đó không –

+0

Vâng, tôi cần biết liệu thiết bị cụ thể đã được thiết lập chưa, không chỉ khi nhật ký giao dịch có ở đó. Tôi nghĩ rằng tôi sẽ triển khai NSUbiquityKeyValueStore của riêng mình bằng cách sử dụng vùng chứa phổ biến và các tệp mà tôi tạo. Bằng cách đó, các giá trị chắc chắn sẽ bị xóa khi người dùng xóa dữ liệu iCloud của họ. – lehn0058

2

Xóa iCloud "tài liệu và dữ liệu" chỉ xóa bất kỳ tài liệu và dữ liệu CORE. Nó không xóa bất cứ điều gì trong NSUbiquitousKeyValueStore. Kỳ vọng của tôi là nó sẽ xóa mọi thứ về ứng dụng.

Trước khi thêm hỗ trợ iCloud, tôi đã sử dụng NSUserDefaults để lưu trữ các mẩu dữ liệu nhỏ cho ứng dụng. Ví dụ, người dùng cuối có thể nhập tên và địa chỉ của họ, và tôi sẽ lưu trữ nó trong NSUserDefaults. Nó không phải là dữ liệu phức tạp và tôi không cần sử dụng dữ liệu cốt lõi hoặc tệp phẳng để lưu trữ dữ liệu đó. Nó rất dễ dàng để lưu trữ nó ở đó và nó hoạt động. Nếu tôi xóa ứng dụng khỏi điện thoại, thông tin đó sẽ biến mất, đó là những gì tôi mong đợi. Khi tôi thêm hỗ trợ iCloud, tôi đặt nó vào NSUbiquitousKeyValueStore. Tuy nhiên, ngay cả khi tôi xóa ứng dụng và sau đó xóa "tài liệu và dữ liệu", tên người dùng và địa chỉ người dùng cuối vẫn còn STILL ở đó.

Tôi nghĩ mình đã làm điều gì đó sai. Sau một phần tốt hơn trong một ngày nghiên cứu, tôi nhận thấy rằng lưu trữ khóa giá trị iCloud được cho là dành cho dữ liệu "rời rạc" và "kho dữ liệu khóa-giá trị iCloud không phải là thứ mà người dùng sẽ thấy".

Vì vậy, mặc dù hoàn toàn có khả năng lưu trữ dữ liệu người dùng không phức tạp mà người dùng cuối thực sự thấy, đó không phải là mục đích sử dụng. Những gì tôi đang làm "sai" là sử dụng nó cho một mục đích không sử dụng, mặc dù nó hoạt động tốt cho việc sử dụng đó.

Tôi không chắc chắn là tại sao Apple sẽ không xóa mọi thứ khỏi iCloud. Hoặc ít nhất là cung cấp cho người dùng khả năng.

1

Chính xác là NSUbiquitousKeyValueStore vẫn còn sau khi xóa ứng dụng. Tại thời điểm xóa, thiết bị không biết liệu các thiết bị khác của bạn có vẫn muốn dữ liệu được chia sẻ đó hay không.

Bạn sẽ sử dụng nó để lưu trữ trong ứng dụng trạng thái mua hàng, chi tiết người dùng vv mà bạn muốn được chia sẻ giữa các thiết bị, và khôi phục nếu ứng dụng đã vô tình bị xóa (hoặc gỡ bỏ cài đặt, sau đó cài đặt lại sau)

NSUserDefaults, mặt khác, là dữ liệu thuộc về chính ứng dụng trên thiết bị đó, vì vậy việc xóa ứng dụng sẽ xóa dữ liệu.

+0

Vậy khi nào thì NSUbiquitousKeyValueStore sẽ bị xóa? Chắc chắn điều này không chỉ chồng chất mãi mãi cho các ứng dụng có thể không được sử dụng nữa. Người dùng có thể buộc điều này bị xóa vào một thời điểm nào đó không? –

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