我目前正在忙于一个项目,我需要使用外部附件来阅读Mifare 1k标签.
附件提供了一个SDK,用(Objective?)C++编写,我按照提供的指令将XCode设置为"Compile sources as:Objective-C++",并在"Other linkers flags"中添加"-Obj-C++".
SDK编译好了,但麻烦的是我已经在项目中使用了几个库(例如ASIHTTPRequest,JSONKit,...),并且因为这些库中的那些新设置而导致编译问题.如果我切换回以前的设置,我会在阅读器的SDK中遇到编译问题
问题是:有没有办法只从SDK中编译类作为C++,而项目的其余部分作为objective-c?
编辑: SDK文件仅包含.h(和链接库)
谢谢你的帮助,迈克
xcode compilation objective-c conditional-compilation objective-c++
我正在尝试使用库从标签中获取ID.
我想出了以下内容.寻找标签的循环在后台完成,我在tagAsString中得到了正确的结果.
-(void) readTag {
NSLog(@"readTag");
unsigned char * tagUID = (unsigned char *) malloc(M1K_UID_SIZE * sizeof(char));
//work to do in the background
dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
ERR ret;
while ((ret = scanner->IsTagAvailable(tagUID)) != ERR_TAG_AVAILABLE) {
NSLog(@"ret: %d", ret);
}
//main thread
dispatch_async( dispatch_get_main_queue(), ^{
if(ret == ERR_TAG_AVAILABLE) {
NSLog(@"tag available");
NSString *tagAsString = [[[NSString alloc] initWithFormat:@"%x%x%x%x", tagUID[0],tagUID[1],tagUID[2],tagUID[3]] retain];
}
});
});
}
Run Code Online (Sandbox Code Playgroud)
我希望能够返回该值,以便我可以调用:
NSString * myTag = [self readTag];
Run Code Online (Sandbox Code Playgroud)
那可能吗 ?谢谢你的帮助,迈克尔
我有一个关于iPhone上的错误/异常处理的问题.
我已经阅读了有关Exception的文档,似乎异常只能用于特殊情况.
这是否意味着你不能像在java中那样使用它们?
例如,我正在尝试为我的应用程序编写一个用例控制器.我从以前使用该语言的项目中获得了Java中的一些示例,它们在出现错误时使用异常.
简单的问题是:我可以遵循我在Java中使用的示例,并在Objective-C中"翻译"它(并使用Objective-C异常)或者有更好的方法吗?
这是我想使客观c友好的代码:
public void addPerformance(Perfomance perf) {
//do some preparation
...
//execute the usecase
executor(new AddPerformance(perf));
}
private void executor(Usecase usecase) {
try {
UnitOfWorkServices.INSTANCE.bizTransactionStart();
usecase.execute();
UnitOfWorkServices.INSTANCE.bizTransactionCommit();
} catch (RealException re) {
UnitOfWorkServices.INSTANCE.bizTransactionEscape();
throw re;
} catch (Exception e) {
UnitOfWorkServices.INSTANCE.bizTransactionEscape();
throw new FatalException(this.getClass().getName() + " / executor("
+ usecase.getClass().getSimpleName() + ")", e,
"APPXCP_006_UNEXPECTED_EXCEPTION",
"\n\t |*| : Unexpected exception translated into FatalException");
} finally {
UnitOfWorkServices.INSTANCE.bizTransactionEnd();
}
}
Run Code Online (Sandbox Code Playgroud)
所有异常都是由UI捕获以显示错误消息.
谢谢你的帮助,迈克尔