小编The*_*ebe的帖子

如何在objective-c ++中编译特定文件,在objective-c中编译项目的其余部分

我目前正在忙于一个项目,我需要使用外部附件来阅读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++

17
推荐指数
3
解决办法
2万
查看次数

在后台做一些工作并返回结果

我正在尝试使用库从标签中获取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)

那可能吗 ?谢谢你的帮助,迈克尔

multithreading background return-value objective-c-blocks

8
推荐指数
1
解决办法
9136
查看次数

如何正确处理iPhone上的错误

我有一个关于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捕获以显示错误消息.

谢谢你的帮助,迈克尔

iphone error-handling exception-handling objective-c

5
推荐指数
1
解决办法
660
查看次数