objective-c - 如何从 int* 转换为 NSNumber*

标签 objective-c

我有以下代码。它编译,但崩溃。 我做错了什么?

- (void)start: (int*)shouldPause
{        
    NSNumber * oShouldPause = (NSNumber *)shouldPause;
    [self performSelectorInBackground:@selector(runThread:) withObject: oShouldPause];
}

而函数runThread是

- (void)runThread: (NSNumber*) shouldPause

一般来说,我想在线程外部和线程内部设置一些整数,以根据这个整数改变行为。

感谢您的帮助!

最佳答案

NSNumber * oShouldPause = @(*shouldPause);

你所做的是一个常见的错误。 NSNumber 是一个对象,而 int 是一个原始类型。您将指向原始类型的指针转​​换为指向对象的指针。编译器允许这样做,因为它们都只是指针。此外,代码需要一个对象,试图发送消息和繁荣。出了点问题。

您很可能不需要 int* 作为参数。只需 int。因此,您需要按如下方式创建 number 对象,而无需取消引用:

NSNumber * oShouldPause = @(shouldPause);

关于objective-c - 如何从 int* 转换为 NSNumber*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51751677/

相关文章:

ios - 通过POST方法发送带有图像的参数?

objective-c - 当文本字段开始编辑时,语音转文本自动开始

ios - 与今天的扩展共享 SQLite 不起作用

ios - Simperium iOS CoreData 关系随机为空

ios - 如何将 NSOperationQueue 与 NSURLSession 一起使用?

ios - 在 didSelectRowAtIndexPath 上为 tableView 单元格设置动画?

ios - 使用 Devise 通过 iOS 应用程序进行注册、登录和注销

ios - SKScene:场景的界限

objective-c - 如何以编程方式进入目标显示模式?

objective-c - 根据 iOS 中的文本宽度动态更改 TextView 宽度