Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 区分UILabel的元数据时出现问题?_Ios_Objective C_Nsstring_Substring - Fatal编程技术网

Ios 区分UILabel的元数据时出现问题?

Ios 区分UILabel的元数据时出现问题?,ios,objective-c,nsstring,substring,Ios,Objective C,Nsstring,Substring,我正在获取当前在iOS应用程序中播放的广播流的元数据(艺术家名称、曲目名称)。然而,这些元数据是一个整体,即=“FRANK SINATRA-主题来自纽约,纽约” 虽然这没关系,但如果我有两个不同的标签,一个写着“FRANK SINATRA”,另一个写着“THEME FROM NEW YORK,NEW YORK”,看起来会更好 要做到这一点,我必须去掉连字符 _metaData = infoString; // THIS IS THE OLD 1- LABEL FOR DATA AL

我正在获取当前在iOS应用程序中播放的广播流的元数据(艺术家名称、曲目名称)。然而,这些元数据是一个整体,即=“FRANK SINATRA-主题来自纽约,纽约”

虽然这没关系,但如果我有两个不同的标签,一个写着“FRANK SINATRA”,另一个写着“THEME FROM NEW YORK,NEW YORK”,看起来会更好

要做到这一点,我必须去掉连字符

    _metaData = infoString;   // THIS IS THE OLD 1- LABEL FOR  DATA ALL WAY

    // THIS IS THE CODE I AM IMPLEMENTING TO GET RID OF THE HYPHEN

    NSUInteger xxx = [_metaData rangeOfString:@"-"].location;


    NSUInteger xxxPlustTwo = xxx + 2;

    NSString *xxxx = [_metaData substringToIndex:xxx];

    self.artistName.text=xxxx;

    NSString *trackInformation = [_trackName substringFromIndex:xxxPlustTwo];

    self.soundInfoMeta.text = trackInformation;
就像这样,我能够将2分开,问题是当该站开始商业化时,我的应用程序立即崩溃。以下是我在Xcode上收到的错误:
***由于未捕获的异常“NSRangeException”而终止应用程序,原因:'***-[\uu NSCFString substringToIndex:]:索引2147483647超出范围;字符串长度为17'

是什么导致了这个问题

更新:我尝试将
NSUInteger
更改为
double
,但这并没有解决问题,下面是最新的崩溃日志:

xxxx    NSString *  nil 0x00000000
NSObject    NSObject        
isa Class   0x0 
xxx double  2147483647  2147483647
xplus   double  2147483649  2147483649
_trackName  __NSCFString *  @"http://www.181.fm"    0x16d8a890
NSObject    NSObject        
isa Class   __NSCFString    0x39d9a8f8

您可能得到的输入并没有连字符,所以连字符的
位置是
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];
        }
    }];
}
您还可以检查派生范围的
位置
属性是否等于
NSNotFound
,然后假设无法从中派生艺术家,并在适当的标签中显示您的
\u元数据
变量。例如:

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
}

多好的回答啊,这是我在这里得到的最好的答案。如果我能给你我所有的代表,我完全愿意。谢谢你抽出时间!真的很感激