I have an NSMutableArray that contains a MPMediaItem and song title as it's
key.

 I then take a search string and loop through the entire NSMutableArray
looking for a fuzzy match. It works very well, the problem is that the array
contains 1,777 items (could contain more) and the search takes about 6
seconds on iOS. I am wondering how I could optimize this to get the search
time down. I was thinking of splitting the array into 2 or something, just
not really sure what the best approach might be.

Here is some code I am using (stringValue passed in through the method):

    @autoreleasepool {
            float currentFoundValue = 1000.0;
            MPMediaItem *test;
            NSArray *dis;
            MPMediaItemCollection *collection;
            float match;
*            //This takes about 6 seconds each search for song*
            for (id key in songsDictionary) {
                NSString *thisSong = key;
                int suppliedCount = [stringValue length];
                int keyCount = [thisSong length];
                //Fuzzy matching
                if(suppliedCount > keyCount){
                    match= [StringDistance stringDistance:thisSong
:stringValue];
                } else {
                    match= [StringDistance stringDistance:stringValue
:thisSong];
                }
                //Get the very best match there is to be found for song.
                if(match < currentFoundValue){
                    currentFoundValue = match;
                    test = [songsDictionary objectForKey:thisSong];
                    dis = [NSArray arrayWithObject:test];
                    collection = [[MPMediaItemCollection alloc]
initWithItems:dis];
                }
            }

            if([collection count] != 0){
                [musicPlayer setQueueWithItemCollection:collection];
                [musicPlayer play];
                //Used to populate a UITableView
                songsArray = [[NSMutableArray alloc] init];
                @autoreleasepool {
                    for (MPMediaItem *song in dis) {
                        NSString *title = [song
valueForProperty:MPMediaItemPropertyTitle];
                        [songsArray addObject:title];
                    }
                }
                [myTable reloadData];
                [myTable flashScrollIndicators];
                countView.hidden = NO;
                countLabel.text = [NSString stringWithFormat:@"%d",
[songsArray count]];
            } else {
                NSString *msg = [NSString stringWithFormat:@"Search could
not find the song \"%@\". Please try again.", stringValue];
                UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Song
Not Found"
                                                                message:msg

 delegate:self
                                                      cancelButtonTitle:@
"OK"

otherButtonTitles:nil];
                [alert show];
            }
        }

Thanks for any suggestions.

- Eric
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to