objective-c - 调试和发布版本之间的不同行为

标签 objective-c ios

我正在使用 SOCKit为我的应用程序实现 URL 路由器的库。我有一个自定义 Router 类,它跟踪所有有效路由并实现一个 match 方法,给定一个路由 NSString,将它匹配到相应的 View Controller 。为了使事情变得更简单,可匹配的 View Controller 必须实现 Routable 协议(protocol),这需要一个 initWithState: 方法,该方法将 NSDictionary 作为参数。相关代码如下:

- (id)match:(NSString *)route
{
  for (NSArray *match in routePatterns) {
    const SOCPattern * const pattern = [match objectAtIndex:kPatternIndex];
    if ([pattern stringMatches:route]) {
      Class class = [match objectAtIndex:kObjectIndex];

      NSLog(@"[pattern parameterDictionaryFromSourceString:route]: %@", [pattern parameterDictionaryFromSourceString:route]);

      UIViewController<Routable> *vc;
      vc = [[class alloc] initWithState:[pattern parameterDictionaryFromSourceString:route]];
      return vc;
    }
  }
  return nil;
}

当我使用 debug 配置运行应用程序时,[pattern parameterDictionaryFromSourceString:route] 产生了预期的结果:

[pattern parameterDictionaryFromSourceString:route]: {
    uuid = "e9ed6708-5ad5-11e1-91ca-12313810b404";
}

另一方面,当我使用 release 配置运行应用程序时,[pattern parameterDictionaryFromSourceString:route] 生成一个空字典。我真的不确定如何调试它。我已经检查了我自己的代码,看看 debugrelease 构建之间是否有任何明显差异,但无济于事,我还查看了 SOCKit source code .想法?谢谢!

最佳答案

我今天刚遇到这个问题。在我的案例中,问题是 Release 构建了被阻止的断言,但在 -performSelector:onObject:sourceString:-parameterDictionaryFromSourceString: 中,这一行很重要:

NSAssert([self gatherParameterValues:&values fromString:sourceString],
  @"The pattern can't be used with this string.");

当断言被转换为空操作时,它就消失了,并且收集永远不会发生。没有参数值,不会发生太多事情!我将其更改为以下内容(并将向 GitHub 存储库提交问题):

if( ![self gatherParameterValues:&values fromString:sourceString] ) {
  NSAssert(NO, @"The pattern can't be used with this string.");
  return nil;
}


编辑:报告为issue #13 .

关于objective-c - 调试和发布版本之间的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9348764/

相关文章:

ios - 在 iOS XCode 项目中更改产品名称宏

android - 如何将旧的 Cordova 项目更新到最新版本?

iphone - 将浮点值从数组传递到坐标时出现异常

iphone - 在 UIToolBar 中垂直移动 UIBarButtonItems

ios - 奇怪的ARC内存发行问题

iphone - 如何修复应用程序用户报告的崩溃?

objective-c - 用于自定义 NSWindow 或 NSView 的 native OSX Lion 调整光标大小

iOS URL 请求不工作

ios - 内容的 UIContainerView 高度(嵌入式 UITableViewController)

objective-c - Objective C、Cocoa、参数引用 - ITK #Cocoa