2012-08-31 53 views
12

Đôi khi tôi gặp sự cố khi mở UIDocuments được lưu trữ trên iCloud. Tôi gọi đoạn mã sau vào đầu của ứng dụng của tôi sau khi kiểm tra xem iCloud có sẵn và nhận được kết quả của NSMetaDataQuery hay không. Điều này làm việc trong 98% của tất cả các trường hợp. Nó chỉ là đôi khi (ví dụ như đôi khi sau khi cài đặt lại ứng dụng) mà completionHandler sẽ không bao giờ được gọi là:Tại sao đôi khi iCloud ngừng hoạt động?

FRNBDocument *doc = [[FRNBDocument alloc] initWithFileURL:fileURL]; 
[doc openWithCompletionHandler:^(BOOL success) { 

    NSLog(@"... doc: openedWithCompletionHandler"); 

Như bạn có thể nhìn thấy từ các mã, tôi initialising dụ UIDocument mới (FRNBDocument), vì vậy nó không thể là trường hợp hơn một UIDocument cũ vẫn còn mở và do đó điều này không mở được.

Cách duy nhất để ứng dụng hoạt động trở lại là giết nó và sau đó chuyển đến cài đặt.app> iCloud> Tài liệu & Dữ liệu rồi TẮT và sau đó BẬT lại. Khi tôi quay lại ứng dụng, UIDocs sẽ được tải mà không gặp sự cố.

Tôi đã nhận thấy rằng các ứng dụng khác (ví dụ: xTrail do sophiestication) có cùng vấn đề và tôi chỉ có thể khiến chúng chạy lại sau khi thực hiện thủ thuật được mô tả ở trên.

Điều gì đang xảy ra?

+0

Bạn có thể đăng mã bạn sử dụng để đính kèm vào iCloud và phần còn lại của mã tệp hay không..không đủ mã ở đây. –

+0

@stackmonster Tôi sử dụng mã bình thường mà tôi muốn được hạnh phúc để đăng bài, nhưng tôi không nghĩ rằng nó sẽ giúp nhiều. Nói với Apple và nó xuất hiện như thể nó là một lỗi nổi tiếng. –

Trả lời

3

OK, đây có vẻ là lỗi iCloud. Tôi đã liên lạc với Apple và họ đề xuất để gửi báo cáo lỗi. Và vì vậy tôi đã làm (id 12260670).

Điều tôi sẽ làm bây giờ là chỉ cần triển khai bộ hẹn giờ. Nếu UIDocs không được tải sau 20 giây, tôi sẽ hiển thị một AlertView, yêu cầu người dùng truy cập settings.app> iCloud> Tài liệu & Dữ liệu rồi TẮT và sau đó BẬT lại.

Điều này thật khó chịu. Không thể tin được.

+1

@stackmonster Nếu đó không phải là lỗi, vui lòng giải thích lý do. Tôi sẽ rất vui khi đánh dấu bạn là câu trả lời đúng nếu nó giải quyết được vấn đề. Cảm ơn. BTW Tôi đã cố gắng sử dụng một tỷ lệ hỗ trợ kỹ thuật cho câu hỏi này, vì vậy tôi chắc chắn họ sẽ giải thích các API cho tôi nếu đây không phải là một lỗi. Nhưng họ đã hoàn trả tỷ lệ TCI và nói rằng tôi nên gửi một lỗi thay thế. –

0

truy cập iCloud đòi hỏi trở về gọi điện thoại của hàm

- (NSURL *)URLForUbiquityContainerIdentifier:(NSString *)containerID 

trả về

URL trỏ đến các thùng chứa có mặt khắp nơi quy định, hoặc nil nếu container không thể được đặt hoặc nếu iCloud bộ nhớ không khả dụng cho người dùng hoặc thiết bị hiện tại.

Reference

Khi iCloud mà không phải là đáp ứng, tôi kiểm tra nếu tôi nhận được URL và sau đó chỉ tiến hành đồng bộ hơn nữa của dữ liệu.

NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]; 
if (ubiq) 
{ 
    NSLog(@"iCloud access at %@", ubiq); 
    [self loadDocument]; 
} 
else 
{ 
    NSLog(@"No iCloud access"); 
} 
+0

Tôi không nghĩ đây là vấn đề. Tôi nhận được một ubiq hợp lệ và tôi thậm chí có được kết quả thông qua NSMetaDataQuery. Tuy nhiên, không có kết quả nào có thể được tải khi iCloud bị kẹt. –

+0

bạn có thể thêm thông báo bằng cách sử dụng [[NSNotificationCenter defaultCenter] addObserver: self bộ chọn: @selector (queryDidFinishGathering :) tên: NSMetadataQueryDidFinishGatheringNotification object: query]; –

+0

Tôi đã làm tất cả những điều đó. Tôi có thể đăng toàn bộ mã, nhưng nó sẽ khá tẻ nhạt và bên cạnh vấn đề. Tôi đã đảm bảo rằng mọi thứ đều ổn và nó hoạt động 95% thời gian. Đôi khi, đôi khi, iCloud phát và không tải UIDocument. Có vẻ như một vấn đề đã biết - các nhà phát triển khác cũng có cùng một vấn đề. –

1

Tôi đang gặp sự cố tương tự. NSMetadataQuery trả về kết quả nhưng openWithCompletionHandler: rất thỉnh thoảng không hoàn thành và do đó dữ liệu của ứng dụng sẽ không tải. Đối với một thời gian tôi đã có một workaround bằng cách kiểm tra NSMetadataUbiquitousItemIsDownloadedKey trước khi cố gắng để nạp tài liệu. Nếu nó không được tải xuống, tôi gọi evictUbiquitousItemAtURL và sau đó startDownloadingUbiquitousItemAtURL. Sau đó tôi phải tiếp tục bỏ phiếu với một NSMetadataQuery cho NSMetadataUbiquitousItemIsDownloadedKey là đúng lúc tôi có thể gọi thành công openWithCompletionHandler. Điều này xuất hiện để giải quyết vấn đề. Tuy nhiên, điều này dường như không còn hoạt động trong iOS 6 hoặc không hoạt động nữa. Vui lòng cập nhật cho chúng tôi nếu bạn tìm được cách giải quyết tốt hơn hoặc nhận bản cập nhật về lỗi của Apple.

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