2012-09-19 9 views
13

Được đăng trên Apple mà không có may mắn, nhưng bây giờ là iOS 6 NDA đang lên, hy vọng nhiều mắt sẽ thấy nó ở đây.MPMediaPickerController.showsCloudItems dường như không làm gì cả

Tôi đang cố gắng sửa đổi ứng dụng để chỉ cho phép người dùng chọn nhạc đã được tải xuống cục bộ. Tôi có đoạn code sau đây theo iOS 6 GM:

MPMediaPickerController* mpc = [[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeAnyAudio]; 

mpc.allowsPickingMultipleItems = YES; 
mpc.modalPresentationStyle = UIModalPresentationCurrentContext; 
mpc.showsCloudItems = NO; 

[self presentViewController:mpc animated:YES completion:nil]; 

Từ các tài liệu:

Hành vi mặc định cho một bảng chọn phương tiện truyền thông mục là YES, có nghĩa là bảng chọn hiển thị các mục iCloud có sẵn. Một mục phương tiện được coi là một mục iCloud nếu nó có sẵn qua iTunes Match và chưa được lưu trữ trên thiết bị.

Tôi thực hiện điều này có nghĩa là nếu iTunes Match được bật, chỉ những mục đã được tải xuống thiết bị mới hiển thị trong bộ chọn, tuy nhiên tôi luôn thấy toàn bộ thư viện iTunes Match. Tôi đã gửi một radar cho điều này, bởi vì nó có vẻ giống như một lỗi nghiêm trọng. Nếu bất cứ ai có thể nói với tôi bằng cách khác, tôi rất muốn biết những gì tôi đang thiếu ở đây.

+0

Số Radar là gì? Tôi sẽ lừa nó. Nó vẫn bị phá vỡ trên 6.0.1. –

+0

Vẫn bị hỏng vào 3/6/2013. Đang chiến đấu với bản thân mình. Vui mừng khi thấy tôi không đơn độc. – MarqueIV

+0

vẫn bị hỏng trên 6.1.2. nhưng khi đó là một mục đối sánh iCloud/iTunes, thuộc tính MPMediaItemPropertyAssetURL của MPMediaItem sẽ trả lại không. –

Trả lời

1

Tôi gặp vấn đề tương tự. Mặc dù tôi không thể ẩn các mục, đây là giải pháp tốt mà tôi đã sử dụng để ngăn mọi người có thể chọn chúng. Bên didPickMediaItems, bạn nên tạm thời nạp nó vào một AVPlayerItem và sau đó chỉ cần kiểm tra tính hợp lệ của mục đó như sau:

- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection 
{ 
    MPMediaItem *selectedItem = [[mediaItemCollection items]objectAtIndex:0]; 
    NSURL *tempURL = [selectedItem valueForProperty:MPMediaItemPropertyAssetURL]; 
    AVPlayerItem *playerItem = [[AVPlayerItem alloc]initWithURL:tempURL]; 

    if(playerItem.loadedTimeRanges==NULL) 
    { 
    UIAlertView *alert=[[[UIAlertView alloc]initWithTitle:NSLocalizedString(@"Invalid Song Choice",NULL) message:NSLocalizedString(@"Please choose a song that is local to your phone.",NULL) delegate:self cancelButtonTitle:NSLocalizedString(@"Okay",NULL) otherButtonTitles:nil]autorelease]; 
    [alert show]; 
    [playerItem release]; 
    } 
    else 
    { 
     NSLog(@"Your good to go...do whatever you want with the local song"); 
    } 
} 
+0

woooooah .. ai đó có thể nói "đắt tiền"? – abbood

4

Một giải pháp tốt hơn để kiểm tra xem một mục đến từ iCloud trong didPickMediaItems đại biểu:

 MPMediaItem *selectedItem = [selectedItems objectAtIndex:0]; 

    if (![[selectedItem valueForProperty:MPMediaItemPropertyIsCloudItem] boolValue]) 

Bạn không thực sự cần phải chơi nó, nó là hiệu quả hơn để sử dụng tài sản nhúng trong MPMediaItem.

-1

Dường như nó đã được sửa trong iOS 7.

Mã sau hoạt động; Các mục iCloud không hiển thị:

MPMediaPickerController *picker = [[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeMusic]; 
picker.delegate = self; 
picker.allowsPickingMultipleItems = NO; 
picker.showsCloudItems = NO; 
+0

Chỉ cần lưu ý: điều này dường như chỉ hoạt động nếu mục tiêu triển khai của bạn là ≥ 7.0. –

+0

Vẫn không hoạt động với tôi – thisiscrazy4

+0

Có vẻ như tôi đang làm việc với mục tiêu triển khai 6. Cảm ơn CocoaAficionado – user3344173

8

Đây có vẻ là sự cố hệ điều hành.

Sử dụng picker.showsCloudItems = NO; hiển thị chính xác ít hơn bài hát, thay vì toàn bộ danh sách ... Các bài hát được liệt kê có bài hát được tải xuống thủ công trong ứng dụng Nhạc hoặc bài hát được phát trực tuyến và do đó được lưu vào bộ nhớ cache.

Vấn đề, ít nhất là trong trường hợp của tôi, là đối phó với những người được lưu trong bộ nhớ cache.

Nếu tôi chọn một bài hát được tải xuống thủ công giá trị MPMediaItemPropertyIsCloudItemNO, điều này là chính xác. Tôi cũng có thể truy cập URL của nội dung thông qua thuộc tính MPMediaItemPropertyAssetURL.

Mặt khác, việc lựa chọn một bài hát đã được lưu trữ lợi nhuận YES trên MPMediaItemPropertyIsCloudItemnil trên MPMediaItemPropertyAssetURL, làm cho bài hát hầu như vô ích cho tôi.

Rất tiếc, tôi không có câu trả lời thực sự nhưng tôi không có đủ danh tiếng để chỉ nhận xét.

Hy vọng 2 xu của tôi sẽ trợ giúp bằng cách nào đó, nhưng có vẻ như với tôi rằng vấn đề này chỉ có thể được Apple giải quyết trong bản cập nhật trong tương lai.