2013-08-06 21 views
18

Khi tôi cố gắng truy cập hình ảnh từ luồng ảnh, đôi khi phương thức [asset defaultRepresentation] trả về không.Làm thế nào để có được một ALAssetSự hiểu biết của một ALAset photostream chia sẻ?

Theo tài liệu, điều này có thể xảy ra nếu nội dung không phải là (chưa) có sẵn cục bộ.

Phương thức này trả về 0% cho nội dung từ luồng ảnh được chia sẻ chưa có sẵn cục bộ. Nếu nội dung có sẵn trong tương lai, một thông báo ALAssetsLibraryChangedNotification sẽ được đăng.

Sau khi tôi xem ảnh trong ứng dụng Photos.app, nó cũng có sẵn cho ứng dụng của tôi, nhưng rõ ràng là tôi muốn ứng dụng của tôi kích hoạt sự kiện "tải xuống cục bộ".

Tôi nhìn vào mã MyImagePicker mẫu từ Apple, nhưng nó thể hiện hành vi tương tự (chỉ là một hình ảnh thu nhỏ có sẵn)

Làm thế nào tôi có thể làm cho tài sản có sẵn tại địa phương?

Chỉnh sửa: Vì Apple đã giới thiệu Photos.framework trong iOS8 và việc sử dụng ALAssets không được chấp nhận trong iOS9, điều này có thể sẽ không bao giờ được khắc phục.

+1

Chạy vào vấn đề này, nhìn thấy nó thường chạy trên iOS7. Các ứng dụng khác dường như có cách tải những hình ảnh này, vì vậy phải có cách, nhưng việc đọc tài liệu liên quan đến ALAsset đã không tiết lộ bất cứ điều gì ... – Laura

+0

@Laura Tôi cũng thấy điều này trên iOS7, tôi không thể nói rằng tôi đã thấy các ứng dụng khác xử lý cùng một ảnh chính xác. (Nếu một hình ảnh không tải trong ứng dụng của tôi, tôi chuyển sang instagram và nó bị lỗi khi cố gắng truy cập cùng một ảnh). Khi tôi mở ảnh trong ứng dụng Ảnh của Apple, nó hoạt động ở mọi nơi chính xác. – Pieter

+0

Pic Collage là ứng dụng tôi chạy mà dường như làm việc (ít nhất là đôi khi - lần khác nó chỉ bị treo). Khi tôi chọn hình thu nhỏ từ bộ chọn ảnh, tôi có thể thấy hình ảnh đó thêm hình ảnh đầu tiên dưới dạng hình thu nhỏ, hình vuông của hình thu nhỏ và sau đó một giây để thay thế hình thu nhỏ bằng hình ảnh có kích thước đầy đủ. Vì vậy, nó dường như đi và tải nó, nhưng không chắc chắn bây giờ. Tôi đã thử tạo một album mới, thêm nội dung vào album đó và sau đó cố liệt kê các nội dung trong nhóm đó, nhưng cũng không có xúc xắc. – Laura

Trả lời

1

Kể từ khuôn khổ PhotoKit đã được giới thiệu bởi Apple trong iOS8, và tất cả các công cụ ALAsset đã không được chấp nhận trong iOS9, thật an toàn khi nói rằng điều này sẽ không bao giờ được khắc phục.

Tuy nhiên, điều này có thể được thực hiện đúng với API PhotoKit mới.

Bạn phải đặt networkAccessAllowed = YES trên PHImageRequestOptions khi yêu cầu một hình ảnh và nó sẽ tải xuống từ iCloud nếu cần.

PHAsset* photoAsset = ... 
CGSize fullImageSize = ... 
PHImageRequestOptions* options = [PHImageRequestOptions new]; 
options.networkAccessAllowed = YES; 
[[PHImageManager defaultManager] requestImageForAsset:photoAsset 
     targetSize:fullImageSize contentMode:PHImageContentModeAspectFill 
     options:options resultHandler:^(UIImage *result, NSDictionary *info) { /* use result image */ }]; 
4

Tôi rơi vào cùng một vấn đề. Tôi không thể tìm được cách để có được hình ảnh. Tất cả các bạn có thể làm là không hiển thị hình ảnh có "defaultRepresentation" nil hoặc thả hỗ trợ cho hình ảnh chung ở tất cả bằng cách gọi [ALAssetsLibrary disableSharedPhotoStreamsSupport];

Hy vọng rằng sẽ giúp

2

Tôi tìm thấy câu trả lời! Nó không phải là tài liệu và có sử dụng câu trả lời sau đây một cách thận trọng. (Thận trọng có nghĩa là Apple không cho phép sử dụng các cuộc gọi API riêng).

Trên nội dung có phương thức có tên - (void)requestDefaultRepresentation;, bạn có thể sử dụng phương pháp này để kích hoạt Thư viện nội dung tải xuống ảnh được chia sẻ. Như đã nêu trong tài liệu, ALAssetsLibraryChangedNotification sẽ được kích hoạt để cho bạn biết hình ảnh đã có sẵn.

Không có ý tưởng, tại sao Apple không ghi lại. Chúc may mắn vui vẻ =)

Bạn có thể tránh được một cảnh báo với tiêu đề sau đây:

ALAsset + RequestDefaultRepresentation.h

#import <AssetsLibrary/AssetsLibrary.h> 

@interface ALAsset (RequestDefaultRepresentation) 
- (void)requestDefaultRepresentation; 
@end 
+0

Điều cần biết nhưng việc sử dụng API riêng rõ ràng không phải là giải pháp có thể chấp nhận được đối với các ứng dụng trên Appstore. – Pieter

+1

Tôi hiểu, ít nhất nó cho thấy rõ ràng rằng nó tồn tại và cách nó có thể được thực hiện. Không có cách nào khác. – Mark

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