MacRuby 还没有完成——它只是不适用于我使用的一些 ruby 代码。我遇到了同样的 NSData 问题,我能够创建一个 CFData 实例,使用以下代码看起来没问题
gem 'RubyInline'
require 'inline'
class CFDataWrapper
begin
inline do |builder|
builder.include "<CoreFoundation/CoreFoundation.h>"
builder.c_raw_singleton "
static VALUE fromString(int argc, VALUE *args){
CFDataRef d = CFDataCreate(NULL, RSTRING_PTR(args[0]), RSTRING_LEN(args[0]));
VALUE result;
char type = '@';
ocdata_to_rbobj(Qnil,&type, (const void *)&d, &result, false) ;
return result;
}
"
end
end
end
bytes = [128].pack('i1')
data = CFDataWrapper.fromString(bytes)
puts data.inspect
inspect 的输出与 10.6 以下不同,但我可以将其传递回期望 NSData 实例并且它们似乎可以工作的方法,在其上调用 NSData 方法等。除了这个玩具脚本之外,它还可以工作一个我用来填充核心数据文档的脚本,其中一个实体具有二进制数据属性