2010-08-26 17 views
10

Tôi đang phát triển một ứng dụng iPhone sử dụng thư viện iPod để phát một số bài hát. Tôi tải các bài hát với mã dưới đây. Vấn đề là, khi chạy mã này ngay sau khi thiết bị đã được đồng bộ hóa với iTunes, có một vấn đề. Rõ ràng Thư viện iPod cần được cập nhật và phải mất một thời gian. Nếu tôi vào ứng dụng iPod ngay sau khi đồng bộ, tôi thấy một thông báo nói "Đang cập nhật thư viện ..". Nếu tôi gọi "[mục truy vấn]" từ ứng dụng của tôi trong khi điều đó đang xảy ra, tôi nhận được một mảng trống cho biết không có bài hát nào trong thư viện. Mọi thứ hoạt động hoàn hảo khi cập nhật kết thúc. Có cách nào để giải quyết vấn đề này không? Có thể một cách để phát hiện khi cập nhật kết thúc. Tôi đã cố gắng để nghe NSNotifications, nhưng không ai được gọi là khi cập nhật hoàn tất.Tải bài hát từ Thư viện iPod ngay sau khi đồng bộ hóa

MPMediaQuery *query = [MPMediaQuery songsQuery]; 

// convert all items to abstracted media item 
NSArray *items = [query items]; 

NSMutableArray *convertedItems = [[NSMutableArray alloc] initWithCapacity:[items count]]; 
for (MPMediaItem *item in items) { 
    REMediaItem *mediaItem = [[REMediaItem alloc] initWithMediaItem:item]; 
    [convertedItems addObject:mediaItem]; 
    [mediaItem release]; 
} 

Tôi hy vọng ai đó có thể trợ giúp.

Peter

Trả lời

11

Tôi phát hiện ra rằng thực sự có cách để xem thời điểm cập nhật hoàn tất. Thiết bị sẽ đăng thông báo khi cập nhật kết thúc.

[[MPMediaLibrary defaultMediaLibrary] beginGeneratingLibraryChangeNotifications] 
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; 
[notificationCenter addObserver:self 
         selector:@selector(iPodLibraryDidChange) 
          name: MPMediaLibraryDidChangeNotification 
         object:nil]; 

Vấn đề duy nhất là tôi không thể tìm cách xác định xem thiết bị đang cập nhật Thư viện iPod và tôi sẽ đợi để hoàn thành hoặc thiết bị không có bất kỳ bài hát nào trong thư viện. [các mục truy vấn] sẽ trả về một mảng trống trong cả hai trường hợp.

+0

Tôi có cùng một sự cố thực sự ngay bây giờ - bạn đã giải quyết nó chưa? – shw

4

@Peter là đúng - và thực sự tôi đã tìm thấy một bước đi cho vấn đề của mình. Lúc đầu, tôi thấy rằng MPMediaPickerController trả về nil khi được phân bổ và khởi tạo khi đồng bộ hóa - lúc đầu tôi nghĩ nó sẽ hoạt động để kiểm tra xem có quyền truy cập vào thư viện hay không nhưng đôi khi nó không hoạt động. Cách duy nhất hiện tại tôi thấy là kiểm tra lastModificationDate của MPMediaLibrary - miễn là việc thay đổi bạn sẽ không nhận được kết quả bằng cách sử dụng MPMediaQuery - trì hoãn các thay đổi của bạn trong giây lát khi thuộc tính đó ngừng thay đổi (theo bất kỳ cách nào bạn thích) và bạn nên tốt. Đã gửi báo cáo lỗi về tài liệu đó - tài liệu cho biết bạn nên tải lại các đối tượng đã lưu trong bộ nhớ cache của mình khi thông báo kích hoạt nhưng bạn rõ ràng không thể thực hiện nếu MPMediaQuery trả về nil cho mọi đối tượng bạn cố tìm.

+0

Bạn đã sao chép câu trả lời từ bài đăng của ai đó. –

+0

Có thể từ liên kết này http://www.wwml.tech/questions/192391/load-songs-from-ipod-library-right-after-sync –