iphone - ARC 和可变参数导致 BAD_ACCESS

标签 iphone objective-c ios nsstring variadic-functions

我正在浏览一个可变参数列表,当我到达列表中的最后一个对象时,我总是会收到 BAD_ACCESS 错误。我强烈认为它是 ARC相关问题。

这是我的做法:

-(NSString *)replaceTokensWithStrings:(NSString *)firstKey, ... {

        va_list _arguments;
        va_start(_arguments, firstKey);

        for (NSString *_currentArgument = firstKey; _currentArgument != nil; _currentArgument = va_arg(_arguments, NSString*)) {
            NSLog(@"%@", _currentArgument);
        }

        va_end(_arguments);

    return nil;
}

我必须以某种方式告诉编译器保留 va_arg 返回的结果,但我似乎无法弄清楚在哪里以及如何应用此范例。

更新 1: 这是我调用方法的方式:

[@"Hello <firstname> <lastname>" replaceTokensWithStrings:
  @"firstname", @"Peter",
  @"lastname", "Smith", 
  nil];

更新 2: 我更新了我的问题并添加了一个错误以揭示我实际上做错了什么。请参阅下面我的回答。

最佳答案

我完全走错了路。问题根本不在于函数,而在于我如何调用该函数(其他参与者不可能知道这一点,因为我没有在我的问题示例中犯错误)。

我更新了我的问题,实际问题是我没有传递 NSString 列表,而是传递了 5 个 NSString,而最后一个是普通的 C 字符串。

最后一个 C 字符串导致了 BAD_ACCESS:

差:

"Smith"

好:

@"Smith"

现在我很尴尬:-)

关于iphone - ARC 和可变参数导致 BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11560291/

相关文章:

ios - 在Flutter中安装 native iOS Pod

ios编程: Keeping user configuration in memory vs storage

ios - 如何使用 Facebook 图形 API 识别 Facebook 帖子是否已被点赞?

iphone - 从 libMo.a 中的 PlatCompress(enumCompressOperation, CompressCookie*, void*, long) 引用的体系结构 i386 : "_deflate", 的 undefined symbol

iphone - NSMutableArray arrayWithCapacity 与 initWithCapacity

ios - 首次进入相机时 UIImagePickerController 上的 UI 方向错误

iphone - 将 NSDecimalNumber 变为负数

iphone - 我的应用程序会响应 url 方案吗?

ios - 如何从Apple Push Notifications获取userInfo

ios - TableView Parse Swift 数据未显示在应用程序中