2011-01-10 7 views
2

これは私を馬鹿にしているので、誰かがObjective-Cの騒ぎを助けてくれることを願っています。asとidで渡された整数からNSDateを取得するには?

私はTitanium Appceleratorを使ってiPhoneアプリを開発していますが、私はiPhoneのカレンダーにイベントを送ることができるXCodeでアドオンモジュールを作成しようとしています。私がしたいのは、2001年1月1日(GMT)以来の秒数で日時を計算し、それを常に返すような文字列の最新のものを混乱させることなくカレンダーに直接送信することです間違った時間。この時点では、整数をイベント日付フィールドに取得できませんでした。どちらもNSDateタイプです。

チタンは、JavaScriptからの引数を取り、オブジェクトコードにコンパイルしたので、私はこのように私の「CAL」のオブジェクトを呼び出すことができます。

var startDate = 316367923; 
var endDate = 316367923;  
var results = cal.newEvent(startTime,endTime) 

。 。 。これは、「CAL」オブジェクトがそのコールを受信する方法である:

-(BOOL)newEvent:(id)args { 
    id startDate = [args objectAtIndex:0]; 
    id endDate = [args objectAtIndex:1]; 
    ... 

私はイベントオブジェクトにこれらの整数を取得行うために望んでいる何を:

EKEventStore *eventDB = [[EKEventStore alloc] init]; 
EKEvent *theEvent = [EKEvent eventWithEventStore:eventDB]; 
... 
theEvent.startDate = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate: (int) startDate]; 
theEvent.endDate = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate: (int) endDate]; 

は、これはエラーなしでコンパイルが、私を引き起こしそれにもかかわらず、私は私の理解に欠けているものがあると思っています。どこが間違っているのだろうか?

おかげで、

マーク

+1

あなたのアプリはクラッシュする/具体的なエラーはどこですか? –

+0

私はこれを書いて以来、クラッシュは無関係であることが判明しました。割り当てられていないポインタを解放しようとしていました。 – mpemburn

答えて

6

かなりおそらく '引数' は、したがってたstartDateとendDateには、リテラルオブジェクトではありません、NSArrayのです。おそらく、次のようなことをしたいと考えています:

theEvent.startDate = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:[startDate intValue]]; 

startDateはNSNumberです。そうでない場合は、渡された番号の種類を見つけるためにチタンのドキュメントをチェックしてください。

+0

パーフェクト!それはトリックでした - ありがとう! – mpemburn

0

これはあなたのクラッシュの原因ではないかもしれないが、initWithTimeIntervalSinceReferenceDate NSDate方法は、(typedef double NSTimeIntervalとして定義)NSTimeIntervalない整数を期待しています。すなわち:そのメソッドのシグネチャが

:私たstartDateとendDateにはのNSNumberに変換される賭けたい

- (id)initWithTimeIntervalSinceReferenceDate:(NSTimeInterval)seconds 
0

は、オブジェクトの代わりにint値。したがって、次の行を試してください:

theEvent.startDate = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate: (int) [startDate intValue]]; 
theEvent.endDate = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate: (int) [endDate intValue]]; 
0

私はあなたのクラッシュは何か関係があるとは思っていませんが、漏れている可能性があります。ライン:

theEvent.startDate = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate: (int) startDate]; 
theEvent.endDate = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate: (int) endDate]; 

はたstartDateと終了日のためのセッターは、あなたがしなければならない(javaはそれを行うだろうかので、私は間違っているかもしれない場合、私は知らない)、それらの所有権を取得した場合、数1を保持してオブジェクトを割り当てますそれらをローカル変数に格納してから、それらをイベントに割り当ててから、releaseを後で呼び出すことができます。 だから、これは次のようになります:

NSDate *sDate = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:[startDate intValue]]; 
    theEvent.startDate = sDate; 
    [sDate release]; 
関連する問題