不兼容的指针类型将 'nsnumber *' 发送到 'nsstring *' 类型的参数

incompatible pointer types sending 'nsnumber *' to parameter of type 'nsstring *'

我试图让一个警告框显示一个随机生成的数字,但无论我怎么玩,我都没有让它工作,我仍在网上搜索。这是我拥有的:

ticketNumber = [NSNumber numberWithInt:arc4random() %100000];

PFObject *people = [PFObject objectWithClassName:@"People"];
people[@"ticket"] = ticketNumber;
people[@"photo"] = chosenImage;
[people saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
    if (succeeded) {
        // The object has been saved.
        UIAlertView *ticketNumberView = [[UIAlertView alloc] initWithTitle:@"Ticket Number"
                                                                   message:ticketNumber
                                                             delegate:nil
                                                    cancelButtonTitle:@"OK, I got it."
                                                    otherButtonTitles: nil];

        [ticketNumberView show];

但是,我收到的错误是 "incompatible pointer types sending 'nsnumber *' to parameter of type 'nsstring *'"。该应用程序仍然可以在我的 iPhone 上编译和运行,但是当它运行到此代码区域时,它会冻结并崩溃。我这里有什么问题吗?

尝试

[ticketNumber stringValue];

方法stringValue用于将ticketNumber表示为人类可读的字符串。

希望对您有所帮助

您可以使用 [ticketNumber stringValue] 将 NSNumber 转换为 NSString,并使用 performSelectorOnMainThread 显示警报视图。

[alertView performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:NO];

在 UIAlertView Class 参考 (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIAlertView_Class/index.html#//apple_ref/occ/instp/UIAlertView/message) 中,"message" 属性 被定义为 NSString 类型。因此,尝试将 NSNumber 类型的对象 "ticketNumber"(继承自 NSValue,而不是 NSString)发送到 UIAlertView 的消息 属性 中会使编译器报错。要使用此初始化程序,首先使用其他答案中提到的 [ticketNumber stringValue] 方法调用将 ticketNumber 转换为 NSString。