2012-08-30 40 views
8

MPMediaItemPropertyPersistentID độc đáo như thế nào? Nó thậm chí sẽ hoạt động khi đồng bộ danh sách các ID với một thiết bị khác được kết nối với cùng một tài khoản iTunes không?MPMediaItemPropertyPersistentID độc đáo như thế nào?

Tôi muốn triển khai giải pháp danh sách phát được đồng bộ hóa iCloud lưu trữ ID dưới dạng danh sách và tôi cần biết liệu điều này có thể thực hiện được hay không.

Trả lời

7

Theo documentation(tôi nhấn mạnh) ...

Giá trị của nhận dạng MPMediaItemPropertyPersistentID vẫn qua ra mắt ứng dụng và qua đồng bộ mà không thay đổi trạng thái đồng bộ hóa của mặt hàng đó phương tiện truyền thông. Giá trị không được đảm bảo là tồn tại trong một chu kỳ đồng bộ hóa/không đồng bộ hóa/đồng bộ hóa.

Vì vậy, vì nó sẽ không còn tồn tại trên cơ sở này, tôi sẽ ngạc nhiên nếu nó tiếp tục tồn tại trên các thiết bị một cách đủ mạnh mẽ, nếu có.

+0

Tôi đã bỏ lỡ phần tài liệu này. Có vẻ như tôi sẽ phải tìm kiếm một cách khác ... – miho

+1

Trong khi hơi khó khăn, bạn có thể phải xây dựng một cái gì đó phù hợp thông qua dữ liệu valueForProperty có sẵn cho mỗi MPMediaEntity. (ví dụ: MPMediaItemPropertyTitle, MPMediaItemPropertyAlbumTitle, MPMediaItemPropertyArtist, v.v.) –

4

Theo hiểu biết của tôi, điều này là không thể. Tôi nghĩ ID này chỉ liên tục cho mỗi thiết bị. Nó không có định danh duy nhất cho một bài hát cụ thể trong iTunes Store. Nó chỉ là một ID cho các bài hát được đồng bộ hóa của riêng bạn.

Khi bạn đọc tài liệu, bạn sẽ thấy ID này dễ vỡ như thế nào.

"Giá trị không được đảm bảo để duy trì trong một chu kỳ đồng bộ/không đồng bộ/đồng bộ hóa".

Vì vậy, nếu bạn đồng bộ hóa cơ sở dữ liệu bài hát với iTunes và có thể xóa một bài hát khỏi thiết bị iOS và đồng bộ lại và đưa nó trở lại thiết bị của bạn, bạn có thể không nhận lại cùng một ID cho bài hát này. Và chắc chắn không phải trên các thiết bị khác. Vì vậy, tôi nghĩ, những gì bạn đang cố gắng làm sẽ không hoạt động, cho đến khi bạn nhận được Số nhận dạng giống hệt nhau trên toàn thế giới cho mỗi bài hát trong danh mục iTunes hoặc danh mục iTunes của riêng bạn trên máy Mac (nơi Mac phải xử lý các ID).).

2

Những câu trả lời khác là một chút lớn mơ hồ, vì vậy đây là một câu trả lời từ những kinh nghiệm và thử nghiệm của riêng tôi:

1) Bạn không thể sử dụng MPMediaItemPropertyPersistentID để có được một ID đó là bình đẳng giữa các thiết bị.
2) MPMediaItemPropertyPersistentID sẽ thay đổi khi thiết bị được đồng bộ hóa với một thư viện iTunes khác hoặc tất cả nhạc bị xóa khỏi thiết bị và sau đó được đồng bộ hóa lại.

ID nhận được tạo và lưu trữ bởi iTunes khi bài hát được đồng bộ hóa trên thiết bị. Nếu nó không được đồng bộ, ID của bạn sẽ bị xóa.

1

Trong vùng đất khác trường hợp ai đó ở đây, như tôi, bằng cách sử dụng tìm kiếm của Google:

Tôi khẳng định những gì middaparka nói ở trên sau khi nâng cấp iOS của điện thoại của tôi, khi ứng dụng âm nhạc của tôi cố gắng sử dụng persistentIDs từ trước khi nâng cấp. Các ID đã thay đổi, và tôi đã kết thúc (vô tình) nghe nhiều bài hát từ thư viện của tôi mà tôi không thường nghe ...

Vì vậy, tôi đã lấy lời khuyên của middaparka và xây dựng một persistentKey bằng cách độc quyền hoặc băm từ băm title, artistName, albumTitle và thời lượng.Việc xây dựng persistentKey trong khi khởi tạo Cơ sở dữ liệu lõi sẽ tiết kiệm thời gian sau đó, bằng cách tránh so sánh nhiều chuỗi khi tìm nạp các mục trong "mã hoạt động bình thường".

Chiến lược persistentKey hoạt động tốt cho các bài hát. Tuy nhiên, khi tôi thực hiện một băm cho album từ tiêu đề, nghệ sĩ và releaseYear, tôi đã kết thúc với một va chạm.

Tôi có hai album tự tiêu đề của các nghệ sĩ khác nhau phát hành năm 1976. Khi băm cho tên album và nghệ sĩ được độc quyền, họ đã hủy nhau. Tôi đã kết thúc bằng cách sử dụng băm cho thời lượng thay vì của nghệ sĩ, và điều đó làm việc.

Tôi có thể kết thúc tinh chỉnh thuật toán để tạo persistentKeys sau ...