iOS使用具有部分文件名的文件

时间:2014-05-25 12:26:38

标签: ios objective-c cocoa-touch uikit

我有一个有几首歌的应用程序。文件格式为:index.name.mp3

例如:

1.Baby.mp3

2.Just Give Me A Reason.mp3

我有一个表格视图来显示歌曲,并存储所选歌曲的索引

e.g。如果用户点击2.Just Give Me A Reason.mp3,我会将数字2存储在NSUserDefault

有没有办法用它的部分名称来获取文件(例如前缀:2,后缀mp3)


编辑:

以防万一不清楚。我有一个文件名列表。

我所知道的是有多少个文件(例如50个),它们的索引来自(1到50)

2 个答案:

答案 0 :(得分:1)

原始答案

你有一个列表(或数组)的歌曲填充你的桌面视图。

假设它是一个数组,你可以通过该数组进行枚举,只需寻找与该数字匹配的匹配项:

NSString *getFilenameMatchingPrefix:(NSString *)prefixString
{
    // array of filenames is what populates your table view
    for(NSString *filename in arrayOfFilenames)
    {
        // convert filename to numeric prefix / name / suffix
        NSArray *filenameSplitOut = [filename componentsSeparatedByString:@"."];

        // the numeric prefix is what we want
        NSString *prefixFromFile = [filenameSplitOut objectAtIndex:0];
        if([prefixString isEqualToString:prefixFromFile])
        {
            // and we can return a filename, or we can return a file URL if we wanted...
            return(filename);
        }
    }
    return nil;
}

NEWER ANSWER

通常,最好使用文件URL来处理文件系统。但是为了简单起见,我们将使用文件路径(NSString对象)。

鉴于父母"包含mp3文件的文件夹:

NSArray *getAllFilesInAFolder:(NSString *)parentFolderPath
{
    NSError *error = nil;
    arrayOfFiles = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:parentFolderPath error:&error];
    if(error)
    {
        NSLog(@"error getting contents of folder %@ - %@", [error localizedDescription]);
    }

    return(arrayOfFiles):
}

NSString *getFilenameMatchingPrefix:(NSString *)prefixString
{
    // assuming you are hiding the .mp3 files in the resource folder of your app...
    NSArray *allMusicFiles = [self getAllFilesInAFolder:[[NSBundle mainBundle] resourcePath]];

    // allMusicFiles is an array of NSString objects with filenames from the specified directory
    for(NSString *filename in allMusicFiles)
    {
        // convert filename to numeric prefix / name / suffix
        NSArray *filenameSplitOut = [filename componentsSeparatedByString:@"."];

        // the numeric prefix is what we want
        NSString *prefixFromFile = [filenameSplitOut objectAtIndex:0];
        if([prefixString isEqualToString:prefixFromFile])
        {
            // and we can return a filename, or we can return a file URL if we wanted...
            return(filename);
        }
    }
    return nil;
}

答案 1 :(得分:1)

我在这里出去了,但你也可以使用mp3文件中的元数据:How to extract metadata from audio files on iOS

iTunes中的歌曲如何具有标题和艺术家名称,您可以对其进行编辑并阅读,以便您不必分割字符串。通过这种方式,您可以获得更多信息,如持续时间和艺术家等。然后,如果没有元数据,您可以恢复分解文件名。

我不会单独使用文件名,因为如果您使用服务器来托管这些文件并且您拥有相同名称的文件,则需要添加一些内容来区分(2)或随机字符串等文件并且你不希望在你的应用程序中。但那只是我而且只是一个建议。