2013-08-13 2 views
0

это работает в MacRuby (потребовав рамочным «Безопасность»)Указателей в RubyMotion против указателей в MacRuby

error=SecKeychainAddGenericPassword(
           nil, 
           "someservice".length, 
           "someservice", 
           "someusername".length, 
           "someusername", 
           "somepassword".length, 
           "somepassword".pointer, 
           nil) 

В RubyMotion, нет «.pointer» метода, поэтому я думал, что можно было бы сделать:

lpointer=Pointer.new(:string) 
lpointer.assign("somepassword") 

Но в RubyMotion это на самом деле не хранит пароль на брелка. Ключ создан отлично, но в нем нет пароля.

error=SecKeychainAddGenericPassword(
           nil, 
           "someservice".length, 
           "someservice", 
           "someusername".length, 
           "someusername", 
           "somepassword".length, 
            lpointer, 
           nil) 

Что мне не хватает?

ответ

1

это работает

error=SecKeychainAddGenericPassword(
           nil, 
           "someservice".length, 
           "someservice", 
           "someusername".length, 
           "someusername", 
           "somepassword".length, 
           "somepassword".dataUsingEncoding(NSUTF8StringEncoding).bytes 
           nil) 

.dataUsingEncoding делает NSData из NSString, и .bytes делает указатель на данные.

Мораль: кажется

.dataUsingEncoding(NSUTF8StringEncoding).bytes 

в RubyMotion эквивалентно

.pointer for an NString 
Смежные вопросы