我正试图在沙盒应用程序中使用脚本桥从iTunes中过滤出一组曲目。以下代码在应用程序未被沙箱保护时有效,但在沙箱保护时无效:
if(!self.iTunes){
self.iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];
self.library = [[[[self.iTunes sources] get] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"kind == %i", iTunesESrcLibrary]] objectAtIndex:0];
iTunesLibraryPlaylist *libraryPlaylist = [[[[self.library playlists] get] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"specialKind == %i", iTunesESpKMusic]] objectAtIndex:0];
self.musicTracks = [libraryPlaylist tracks];
}
// Create the playlist in iTunes
NSString *playlistName = selectedEquation.name;
iTunesPlaylist *playlist = [[[self.iTunes classForScriptingClass:@"playlist"] alloc] init];
[[self.library userPlaylists] insertObject:playlist atIndex:0];
[playlist setName:playlistName];
// Use persistent id to match between iTunesLibrary and ScriptingBridge
NSArray* iDArray = [self.tableTracks valueForKey:@"persistentID"];
for (NSNumber *decID in iDArray){
NSString* hexID = [NSString stringWithFormat:@"%llx", (long long)[decID integerValue]];
hexID = [hexID uppercaseString];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K == %@", @"persistentID", hexID];
[[[self.musicTracks filteredArrayUsingPredicate:predicate] objectAtIndex:0] duplicateTo:playlist];
}这是一个bug,还是我漏掉了什么?如果我在运行筛选器之前将self.musicTracks转换为NSArray,它将会起作用。然而,这会极大地减慢速度,以至于它实际上无法使用。
编辑:这是我的授权文件。我当然可以添加播放列表和曲目--只是过滤不再起作用了。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.assets.music.read-write</key>
<true/>
<key>com.apple.security.scripting-targets</key>
<dict>
<key>com.apple.iTunes</key>
<array>
<string>com.apple.iTunes.library.read-write</string>
</array>
</dict>
</dict>
</plist>发布于 2013-06-02 21:23:22
看,一个变通方法!
NSArray* sbIDs = [self.musicTracks arrayByApplyingSelector:@selector(persistentID)];
// Use persistent id to match between iTunesLibrary and ScriptingBridge
NSArray* iDArray = [self.tableTracks valueForKey:@"persistentID"];
for (NSNumber *decID in iDArray){
NSString* hexID = [NSString stringWithFormat:@"%llx", (long long)[decID integerValue]];
hexID = [hexID uppercaseString];
// Persistent ID's have to have 16 characters in them. Prepend zeros to make it so.
while ([hexID length]<16) {
hexID = [NSString stringWithFormat:@"%@%@", @"0", hexID];
}
NSInteger sbIndex = [sbIDs indexOfObject:hexID];
[[self.musicTracks objectAtIndex:sbIndex] duplicateTo:playlist];
}这不应该是答案,但它是有效的,而且很快。
https://stackoverflow.com/questions/16882338
复制相似问题