2011-06-14 6 views
0

두 가지 상황이 있습니다. 노래의 트랙 ID가 주어지면 등급을 정수로 설정하십시오. 두 번째는 트랙 아이디 배열을 제외하고는 동일합니다. ScriptingBridge를 사용하여 노래의 이름을 기반으로 iTunesTrack 개체를 검색 할 수 있지만 트랙 ID를 기반으로하는 방법이 있습니까? 의 라인을 따라 뭔가 : 두 번째 상황에ScriptingBridge를 통해 iTunes 트랙을 검색하려면 어떻게합니까?

iTunesApplication *iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"]; 
NSInteger *rating; 
NSInteger *id; 

if ([iTunes isRunning]) { 
    iTunesTrack *track = [ iTunes trackForDatabaseID:id ]; 
    [ track setValue:rating forkey:@"rating" ]; 
} 

, 트랙 ID의 배열을 지정해, iTunesTrack의 SBElementArray 개체를 검색하는 방법은 무엇입니까? 뭔가 같은 :

iTunesApplication *iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"]; 
NSArray *ids; //array of NSIntegers 

if ([iTunes isRunning]) { 
    SBElementArray *tracks = [ iTunes tracksForDatabaseIDs:ids ]; 
    [ tracks setValue:rating forkey:@"rating" ]; 
} 

나는 이것이 노래의 이름을 기반으로 반복적으로 검색하는 것보다 효율적이라고 생각합니다.

+0

이 작업을 수행하는 방법을 알고 있습니까? – david

+0

Nope. 지금은 트랙 제목을 사용하여 반복하고 있습니다. –

답변

0

나는 최근에이 작업을 수행했다. 이 같은 것이 당신을 위해 일해야합니다. 이 응용 프로그램이 아니라 라이브러리 재생 목록 (이 예제에서는 libraryPlaylist)을 요청해야합니다.

NSArray *trackIDs = blah; // the ids you're searching for 
NSString *searchFilter = @"databaseID == %@"; 
NSMutableArray *filters = [NSMutableArray arrayWithCapacity:[trackIDs count]]; 
for (int i = 0; i < [trackIDs count]; i++) { 
    [filters addObject:searchFilter]; 
} 
searchFilter = [filters componentsJoinedByString:@" OR "]; 
NSArray *trackResult = [[libraryPlaylist tracks] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:searchFilter argumentArray:trackIDs]]; 

그리고 trackIDs 배열은 단일 항목 포함되어 있으므로이 경우 특별한 코드를 작성할 필요가 없다면 그건 그냥 잘 작동합니다.