【发布时间】:2014-10-02 12:44:26
【问题描述】:
我遇到了一个问题,我originally 认为这与我的 Xamarin 绑定有关。但是,我现在制作了一个示例 Objective-C 应用程序,以从等式中删除 Xamarin,我也遇到了同样的问题。我创建了一个带有以下标头的库:
#import <Foundation/Foundation.h>
@interface StarIOFunctions : NSObject {
}
+ (NSMutableData *) GetDataToSendToPrinter:(UIImage *)image maxWidth:(int)maxWidth drawerKick:(BOOL)drawerKick compressionEnable:(BOOL)compressionEnable;
@end
点击一个按钮就可以从我的应用程序中调用它:
- (IBAction)DevButton_TouchUpInside:(id)sender {
UIImage *imageToPrint = [UIImage imageNamed:@"image1.png"];
NSMutableData *commandsToPrint = [StarIOFunctions GetDataToSendToPrinter:imageToPrint maxWidth:100 drawerKick:YES compressionEnable:YES];
}
在模拟器中一切正常,但当我部署到设备时崩溃:
2014-10-02 13:34:04.821 StarIO SDK[449:95479] +[StarIOFunctions GetDataToSendToPrinter:maxWidth:drawerKick:compressionEnable:]: unrecognized selector sent to class 0x13dddc
2014-10-02 13:34:04.825 StarIO SDK[449:95479] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[StarIOFunctions GetDataToSendToPrinter:maxWidth:drawerKick:compressionEnable:]: unrecognized selector sent to class 0x13dddc'
*** First throw call stack:
(0x24b2df87 0x324cac77 0x24b33299 0x24b31259 0x24a62d68 0xce213 0x27fdd497 0x27fdd439 0x27fc804d 0x27fdce69 0x27fdcb43 0x27fd6451 0x27faccc5 0x28220513 0x27fab707 0x24af4807 0x24af3c1b 0x24af2299 0x24a3fdb1 0x24a3fbc3 0x2bd74051 0x2800ba31 0x93a3f 0x93040)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)
有人提到设备和模拟器在大小写方面的区别,但文件名肯定是小写的:
是什么导致我的应用崩溃?
【问题讨论】:
-
尝试添加异常断点,看看到底哪里出了问题
-
StarIOFunctions类是否在您与 iOS 应用程序链接的静态库中实现?如果是这样,您需要将-ObjC链接器标志添加到您的项目设置中。编译后,该方法似乎不存在于应用程序二进制文件中。 -
中断了我用 2014-10-02 13:59:37.408 StarIO SDK[473:99349] +[StarIOFunctions GetDataToSendToPrinter:maxWidth:drawerKick:compressionEnable:] 调用 GetDataToSendToPrinter 的行:无法识别的选择器发送到类 0x121ddc (lldb)
-
独立于您的问题,您应该查看 Cocoa 命名约定。方法名称应以与变量相同的小写字母开头。类和 ENUMS 应该以大写开头。编码约定对每个人都有帮助,所以坚持它们总是好的,这将特别有助于我们更好地理解您的代码。
标签: ios objective-c