2012-05-25 3 views
2

Кто-нибудь получил Rubymotion для работы с RKObjectManager RestKit и успешно загрузил некоторые объекты с сервера? У меня с этим много проблем. У меня очень хорошо работает RKClient от RestKit. Я могу получить и отправить сообщение успешно, что здорово. Но я не могу загружать ресурсы с помощью RKObjectManager. Моя Rakefile выглядит следующим образом:Rubymotion & RestKit

$:.unshift("/Library/RubyMotion/lib") 
require 'motion/project' 

Motion::Project::App.setup do |app| 
    # Use `rake config' to see complete project settings. 
    app.name = 'RestKitTest' 
    app.frameworks += %w(CoreData CFNetwork Security MobileCoreServices SystemConfiguration QuartzCore) 
    app.vendor_project('vendor/RestKit', :xcode, :target => 'RestKit', :headers_dir => '../Headers/RestKit/') 
end 

мое приложение делегата выглядит следующим образом:

class AppDelegate 
    def application(application, didFinishLaunchingWithOptions:launchOptions) 
    @window = UIWindow.alloc.initWithFrame UIScreen.mainScreen.bounds 
    @window.rootViewController = TestViewController.alloc.init 
    @window.rootViewController.wantsFullScreenLayout = true 
    @window.makeKeyAndVisible 
    true 
    end 
end 

и мой окурок TestViewController выглядит следующим образом:

class TestViewController < UIViewController 
    def init 
    super 

    puts "checkpoint 1" 

    manager = RKObjectManager.managerWithBaseURLString "http://mlpong.herokuapp.com" 
    puts "checkpoint 2" 

    mapping = RKObjectMapping.mappingForClass League.class 
    puts "checkpoint 3" 

    # mapping.mapAttributes("id", "name", "url", nil) 
    mapping.mapKeyPath("id", toAttribute:"id") 
    mapping.mapKeyPath("name", toAttribute:"name") 
    mapping.mapKeyPath("url", toAttribute:"url") 
    puts "checkpoint 4" 

    manager.mappingProvider.setObjectMapping(mapping, forKeyPath:"") 
    puts "checkpoint 5" 

    manager.loadObjectsAtResourcePath("/leagues.json?auth_token=my_auth_token", delegate:self) 
    puts "checkpoint 6" 

    self 
    end 

    def objectLoader(loader, didFailWithError:error) 
    puts "failed with error: #{error.domain}" 
    end 

    def objectLoader(loader, didLoadObjects:objects) 
    puts "success!" 
    end 
end 

, к сожалению, вы не можете проверить с этот точный код, потому что вам нужен мой токен для сайта.

mapAttributes метод RKObjectMapping класса (закомментировано выше) не будет работать. Если я оставлю это, приложение выведет контрольные точки 1-3, а затем уроды. грабли --trace показывает это:

** Invoke default (first_time) 
** Invoke simulator (first_time) 
** Invoke build:simulator (first_time) 
** Execute build:simulator 
** Execute simulator 
/usr/bin/defaults write com.apple.iphonesimulator "SimulateDevice" "'iPhone'" 
DYLD_FRAMEWORK_PATH="/Applications/Xcode.app/Contents/Developer/../Frameworks":"/Applications/Xcode.app/Contents/Developer/../OtherFrameworks" /Library/RubyMotion/bin/sim 2 1 5.1 "/Applications/Xcode.app/Contents/Developer" "./build/iPhoneSimulator-5.1-Development/RestKitTest.app" 
checkpoint 1 
checkpoint 2 
checkpoint 3 
(main)> ** Execute default 

Если я закомментируйте строку mapAttributes, и использовать другой (более длинный) версию отображения объекта (3 линии осталось раскомментирована перед тем контрольно-пропускной пункт 4), я получаю через все контрольно-пропускные пункты, но получить это, когда я грабли --trace:

** Invoke default (first_time) 
** Invoke simulator (first_time) 
** Invoke build:simulator (first_time) 
** Execute build:simulator 
** Execute simulator 
/usr/bin/defaults write com.apple.iphonesimulator "SimulateDevice" "'iPhone'" 
DYLD_FRAMEWORK_PATH="/Applications/Xcode.app/Contents/Developer/../Frameworks":"/Applications/Xcode.app/Contents/Developer/../OtherFrameworks" /Library/RubyMotion/bin/sim 2 1 5.1 "/Applications/Xcode.app/Contents/Developer" "./build/iPhoneSimulator-5.1-Development/RestKitTest.app" 
checkpoint 1 
checkpoint 2 
checkpoint 3 
checkpoint 4 
checkpoint 5 
checkpoint 6 
(main)> terminate called without an active exception** Execute default 

я застрял с этими ошибками весь день. Если у кого-нибудь есть идеи, сообщите мне. Помощь очень ценится. Спасибо,

Pachun

+0

Ваша первая проблема в том, что 'mapAttributes' следует использовать так:' mapping.mapAttributes ([ "ID", "имя", " URL "])'. Тем не менее, я до сих пор не знаю, как пройти вторую ошибку. (Этот код работает нормально в стандартном проекте Xcode/Objective-C, но не в проекте rubymotion) –

ответ

0

Вы называли некоторые методы, которые не существуют.

manager.mappingProvider.setObjectMapping(mapping, forKeyPath:"") 
puts "checkpoint 5" 

manager.loadObjectsAtResourcePath("/leagues.json?auth_token=my_auth_token", delegate:self) 
puts "checkpoint 6" 

Должно быть.

manager.loadObjectsAtResourcePath("/leagues.json?auth_token=my_auth_token", mapping:mapping, delegate:self) 
puts "checkpoint 5" 

Смотрите подобный вопрос, я нашел ответ на: loadObjectsAtResourcePath (RestKit)