2
4

1 に答える 1

1

おそらくハイフンのない入力を取得しているので、locationハイフンの はNSNotFoundであると定義されているNSIntegerMaxと思います。コードはこれに対して堅牢である必要があります。

これは現在の方法とは少し異なりますが、より多くの種類の入力で機能するはずです。

NSString *infoString = @"ARTIST - TRACK";
NSArray *infoStringComponents = [infoString componentsSeparatedByString:@" - "];
__block NSString *artistString = @"";
__block NSString *trackInfoString = @"";

if ([infoStringComponents count] == 0) {
    // This case should only happen when there's no info string at all
    artistString = @"Unknown Artist";
    trackInfoString = @"Unknown Song";
}
else if ([infoStringComponents count] == 1) {
    // If no hyphens just display the whole string as the track info
    trackInfoString = infoStringComponents[0];
}
else {
    [infoStringComponents enumerateObjectsUsingBlock:^(NSString *component, NSUInteger index, BOOL *stop) {
        NSString *trimmedComponent = [component stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
        if (index == 0) {
            artistString = trimmedComponent;
        }
        else {
            NSString *buffer = @"";
            if ([trackInfoString length] > 0) {
                buffer = @" - ";
            }
            trackInfoString = [trackInfoString stringByAppendingFormat:@"%@%@",buffer,trimmedComponent];
        }
    }];
}

locationまた、派生した範囲のプロパティが等しいかどうかを確認しNSNotFound、そこからアーティストを派生できないと仮定して、_metaData変数を適切なラベルに表示することもできます。例えば:

NSRange hyphenRange = [infoString rangeOfString:@"-"];
if (hyphenRange.location == NSNotFound) {
    // Display only infoString to the user, unformatted into artist / song info
}
else {
    // Try the same technique you're attempting now
}
于 2013-11-07T04:04:44.133 に答える