gpt4 book ai didi

objective-c - 无法重现 App Store 审核期间发生的崩溃 [区域设置问题]

转载 作者:行者123 更新时间:2023-11-29 04:16:01 25 4
gpt4 key购买 nike

我的更新被拒绝后刚刚收到 Apple 发送的崩溃日志。

查看崩溃日志后,我发现了有问题的代码,该代码与解析日期有关。

当我在我的设备上运行此应用程序时,我没有收到此错误。我感觉这是 Apple 测试的设备的本地问题。

在我的运行过程中,下面的原始字符串解析为2012-12-04T11:02:29.5600000+0000。我只是想知道如果在不同的区域设置中它还会以什么其他方式出现。

更重要的是,如何在与Apple相同的环境中测试我的应用程序,这样我就不需要等待审核过程来测试

注意:我继承了这段代码,因此任何有关改进日期解析功能的建议将不胜感激,谢谢。

崩溃是由于以下函数中的[original substringToIndex:range.location+3] 调用引起的。

+(NSString*)convertDate:(NSDate*)date withFormatter:(NSDateFormatter*)dateFormatter{

NSString *original = [dateFormatter stringFromDate:date];

NSRange range = [original rangeOfString:@"+"];
NSString *substring = [original substringToIndex:range.location+3];
NSString *substring2 = [original substringFromIndex:range.location+3];

return [NSString stringWithFormat:@"%@%@%@",substring,@":",substring2];
}

在以下上下文中调用此函数

NSDate *timestamp = [NSDate date];
NSString *dateString = [DateHelper convertDate:timestamp withFormatter:UTCDateFormatter];

最佳答案

+3 完全有可能导致出现越界异常。您是否测试过使用 [NSDate date] 将在其他时区返回相同的格式?

无论哪种方式,您都应该至少检查两件事 - 然后解析该方法的多个日期类型以确认该应用程序仍将运行:

  1. 以下行的范围有一个位置:

    NSRange range = [original rangeOfString:@"+"];
    if (range.location != NSNotFound)
    {
    //do stuff here
    }
  2. range.location + 您输入的 3 不超过字符串总长度

    NSRange range = [original rangeOfString:@"+"];
    if (range.location != NSNotFound)
    {
    if ((range.location + 3) <= original.length)
    {
    //you should also check that ((range.location + 3) + range.length) <= original.length as well
    //do stuff here
    }
    }

虽然上述方法并没有真正解决可能显示不正确的日期/时间戳的问题 - 它应该防止应用程序尝试寻找超出字符串长度范围的范围或索引

希望对您有所帮助,

关于objective-c - 无法重现 App Store 审核期间发生的崩溃 [区域设置问题],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13701686/

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