我的服务器上有一些Java模型,但是在我的iOS应用中,我使用的是不带序列化器的JSON,因为我的服务器没有Objective-C模型生成器。
是否可以在Objective-C中集成Java模型类?
怎么样?
最佳答案
是的,您当然可以,但是您会发现“翻译”会更好。
这些是分步说明(源:http://hints.macworld.com/article.php?story=20040321163154226)。
创建一个新的基金会项目,称为“ HelloBridge”
创建一个名为“ JavaClasses”的新Pure Java Package目标
创建一个名为“ HelloBridge.java”的新Java类,并将其添加到目标
“ JavaClasses”:
public class HelloBridge {
private String string = "Hello";
public void setString(String string) {
this.string = string;
}
public String getString() {
return this.string;
}
public void printString() {
System.out.println(this.string);
}
}
将“ HelloBridge.java”添加到目标的“源”构建阶段
“ JavaClasses”
创建一个名为“ JavaInterfaces.h”的新空文件,并将其添加到
目标“ HelloBridge”:
// Provide Objective-C interfaces for the Java classes
// Not only good practice, it provides Code Sense
@interface java_util_Vector : NSObject
{}
- (void)add:(id)anObject;
- (id)get:(int)index;
@end
@interface HelloBridge : NSObject
{}
- (void)setString:(NSString *)string;
- (NSString *)getString;
- (void)printString;
@end
修改“ main.m”:
#import <Foundation/Foundation.h>
#import "JavaInterfaces.h"
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
// Load the Java VM
id vm = NSJavaSetupVirtualMachine();
// Start the Java class loader
NSJavaClassesFromPath(nil, nil, YES, &vm);
// Load a new instance of the java.util.Vector Java class into an Objective-C pointer
java_util_Vector * vector = NSJavaObjectNamedInPath(@"java.util.Vector", nil);
[vector add:@"one item!"];
NSLog(@"item 1=%@",[vector get:0]);
[vector release];
// Load a new instance of our custom HelloBridge Java class into an Objective-C pointer
HelloBridge * hello = NSJavaObjectNamedInPath(@"HelloBridge", nil);
NSLog(@"item 1=%@",[hello getString]);
[hello setString:@"Test"];
NSLog(@"item 1=%@",[hello getString]);
[hello printString];
[hello release];
[pool release];
return 0;
}
从目标下拉框中选择“ JavaClasses”并构建它
从目标下拉框中选择“ HelloBridge”并构建/运行它