Titanium - Фоновая служба iOS не работает

Я пытаюсь передать переменную в свой backgroundService.js, и они устанавливают время отправки через эту переменную... но она не работает... работает только в том случае, если я вручную устанавливаю время в миллисекундах...

// app.js

var timer = 2000

Ti.App.Properties.setString( 'pushTime', timer )

var service = Ti.App.iOS.registerBackgroundService({
    url:'bg.js'
})


// bg.js

var timer = Ti.App.Properties.getString( 'pushTime' )
Ti.API.info( timer ) 

var notification = Ti.App.iOS.scheduleLocalNotification({
    alertBody:"Passou a bebedeira ja?",
    alertAction:"Ok",
    userInfo:{"hello":"world"},
    sound:"pop.caf",
    badge: 1,
    date:new Date(new Date().getTime() + timer )
})

кто-нибудь знает, почему, когда я использую timer вместо 2000, это не работает?

Спасибо 3.1.1 iOS


person DHennrich    schedule 02.08.2013    source источник
comment
Я не знаю, понимаю ли я вас, но мой код должен работать... поскольку я меняю свой timer на 2000, он делает толчок... в документе Titanium для этих параметров уведомления я получаю следующее: дата: Дата Дата и время для уведомление произойдет.   -  person DHennrich    schedule 02.08.2013
comment
var timer = Ti.App.Properties.getString('pushTime'). Будет ли Javascript автоматически приводить это к числу??   -  person borrrden    schedule 02.08.2013
comment
да на Ti.API.info( timer ) он возвращает 2000 так что это число   -  person DHennrich    schedule 02.08.2013
comment
Это меня не убеждает. Почему метод getString возвращает число? Если это действительно так, то неудивительно, что люди ненавидят Javascript. Почему бы вам не попробовать вместо этого getInt и setInt, просто для удовольствия...   -  person borrrden    schedule 02.08.2013
comment
@borrrden: getString() не возвращает числовое значение. Вы можете видеть это здесь. docs.appcelerator.com/titanium/latest /#!/апи/. Консоль отображает 2000, но это строка   -  person Anand    schedule 02.08.2013


Ответы (1)


DHennrich, Ti.API.info( timer ) возвращает 2000, это не значит, что 2000 — это тип числа. На самом деле это строка, поскольку вы используете setString, чтобы сохранить значение и получить его с помощью getString(). Когда вы используете setString, он сохраняет значение в виде строки, а getString всегда возвращает строку avlue. Вот почему ваш код работал, когда вы использовали 2000 вместо переменной timer.

Из документации API

getString (свойство String, [String по умолчанию]): String

Возвращает значение свойства как строковый тип данных. Параметры

property : String

Name of property.
default : String (optional)

Default value to return if property does not exist.

Возвращает

String

Вы можете использовать setInt или setDouble вместо setString для установки свойство и для извлечения используйте getInt или getDouble соответственно.

Попробуйте сохранить значение, используя Ti.App.Properties.setInt( 'pushTime', timer );

и вы можете получить значение, используя

var timer = Ti.App.Properties.getInt( 'pushTime' );

Я надеюсь, что это решило вашу проблему.

person Anand    schedule 02.08.2013