質問する
347 次
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 に答える