gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:39:04 27 4
gpt4 key购买 nike

我正在获取当前在我的 iOS 应用程序中播放的广播流的元数据(艺术家姓名、轨道名称)。然而,这个元数据是一体的,即 =“FRANK SINATRA - THEME FROM NEW YORK, NEW YORK”。

虽然这没关系,但如果我有 2 个不同样式的标签,一个写着“FRANK SINATRA”,而另一个写着“纽约主题,纽约”,那看起来会好得多。

为此,我必须去掉连字符,

    _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;

就像那样我能够将两者分开,问题是当电台进入商业广告时我的应用程序立即崩溃。以下是我在 Xcode 上收到的错误:*** 由于未捕获的异常‘NSRangeException’而终止应用程序,原因:‘***-[__NSCFString substringToIndex:]: Index 2147483647 out of bounds;字符串长度 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

最佳答案

你可能得到没有连字符的输入,所以连字符的 locationNSNotFound ,它被定义为 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
}

关于ios - 区分 UILabel 的元数据时出现问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19827532/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com