试图在iPhone-Wax中创建NSDecimal

Joh*_*ith 6 lua cocoa-touch objective-c iphone-wax

这是我面临的一个问题:

我用线在Wax中创建一个NSDecimalNumber

    local x=NSDecimalNumber:initWithString("2.3") 
Run Code Online (Sandbox Code Playgroud)

出于这个原因,我想用以下行创建一个NSDecimal

   local y=x:decimalValue() 
Run Code Online (Sandbox Code Playgroud)

这会立即导致程序崩溃.

要创建相同的体验,您需要创建一个基本的蜡项目,并在AppDelegate.lua中添加两行作为函数applicationDidFinishLaunching的lat行.

问题:我怎样才能得到这个返回一个我可以传递的诚实的NSDecimal?我实际上并不需要自己查看或打印这个号码.


Appendicies

  1. 尽管流行信仰互联网,但NSDecimal与NSDecimalNumber有很大的不同.第一个是C结构,第二个是Obj-C结构,我用它很好.
  2. 为了让NSDecimalNumber起作用,我需要从wax-helpers.m中注释出222-224行(NSNumber)和241-246(NSValue).
  3. NSDecimal在Foundation/NSNumber.h中定义

运行时的输出:没有太多的堆栈跟踪,它只是默默地死掉.在调试器中(打开断点),有以下(缩写)调用序列:

#0  0x027553f4 in objc_exception_throw
#1  0x0256e8d6 in __NSGetSizeAndAlignment
#2  0x0256ebd9 in __NSGetSizeAndAlignment
#3  0x025747b8 in __NSMS1
#4  0x02573f9c in +[NSMethodSignature signatureWithObjCTypes:]
#5  0x000342d0 in wax_selectorForInstance at wax_helpers.m:557
#6  0x00035bc2 in __index at wax_instance.m:303
#7  0x000181b9 in luaD_precall at ldo.c:319
#8  0x00018405 in luaD_call at ldo.c:376
#9  0x0002c488 in callTMres at lvm.c:88
#10 0x0002c74a in luaV_gettable at lvm.c:125
#11 0x0002dd26 in luaV_execute at lvm.c:467
#12 0x0001841c in luaD_call at ldo.c:377
#13 0x0000ddc8 in f_call at lapi.c:800
#14 0x0001758a in luaD_rawrunprotected at ldo.c:116
#15 0x0001879a in luaD_pcall at ldo.c:463
#16 0x0000de65 in lua_pcall at lapi.c:821
#17 0x00034e60 in wax_pcall at wax_helpers.m:826  
#18 0x00036be4 in pcallUserdata at wax_instance.m:580
#19 0x00036edc in wax_id_call at wax_instance.m:627
Run Code Online (Sandbox Code Playgroud)

有时会出现以下微小堆栈跟踪:

wTest[36403:207] PANIC: 

Error
-----
Error calling 'applicationDidFinishLaunching:' on lua object '<AppDelegate: 0x6300e50>'
data/scripts/AppDelegate.lua:39: attempt to index local 'x' (a number value)
stack traceback:
    [C]: ?
data/scripts/AppDelegate.lua:39: in function <data/scripts/AppDelegate.lua:19>
Run Code Online (Sandbox Code Playgroud)

这与调试器提供的内容相匹配:Wax正在尝试为数值调用方法.

asa*_*sov 0

也许你应该尝试从字符串NSScanner创建NSDecimal