2015-03-02 24 views
6

Bu soru zaten soruldu, ancak no answers aldı.WatchKit ve iOS App ile Temel Veriler

iOS uygulamam ve WatchKit uzantım, bir Çekirdek Veri deposunun devam ettiği bir Uygulama Grubunu paylaşıyor. Çekirdek Veri modeli (basitleştirilmiş), Age için bir özniteliği olan bir Kişi nesnesidir. Hem uygulama hem de uzantı, yaşı istediği zaman değiştirebilir.

Bir kişinin değeri saatte değişirse, uygulamayı kapatıp yeniden başlatmadıkça uygulama bunu yansıtmaz. Aynı yöne doğru gidiyor.

Saatin üzerindeki yaşı 20'ye değiştirmeye ve telefondaki yaşı 30'a değiştirmeye çalışırsam, birleştirme çakışmalarıyla ilgili bir hata alıyorum çünkü en fazla kullanmıyorum cihazlardan birinde NSManagedObject öğesinin tarihi sürümü (hangisi en son yaşı değiştiririm).

Bu iki sorunu birlikte sorunsuz bir şekilde nasıl yapabilirim?

+0

NSManagedObjectContextObjectsDidChangeNotification öğesine abone olmayı denediniz mi? – sash

+0

Sash Bunu yapmayı denedim, ancak bildirim sadece en son değişikliği yaptığım cihaza çağrıldı. Bu, simülatörün bir sınırlaması olabilir. Ben denediğimde bu çözüm işe yarayıp yaramayacağını görmek istiyorum, ancak hiçbir seyretmek henüz olmadığından Yapamam ... – erdekhayser

cevap

3

Bildirimler farklı işlemler arasında alınmayacağından, bunun yerine Darwin bildirimlerini kullanmanız gerekir. İzle Uzantısından iOS Uygulamasına güncellemeler göndermek için openParentApplication:reply: yöntemini kolayca kullanabilirsiniz, ancak Apple'ın iOS Uygulamasından Saat Uzantısı'na etkinlik göndermenin bir yolu yoktur. Çekirdek Veri nesnesi güncellendiğinde bir Darwin bildirim göndermek için MMWormhole kullanmak (veya Darwin bildirimleri uygulanmasını sahibisiniz) için öneririm Ne

olduğunu. Here, kitaplığın nasıl çalıştığını gösteren bir makaledir. Eğer İzle Uzantısı bir Çekirdek Veri nesnesi güncellerseniz

, daha sonra Darwin bildirim göndermek (veya bir ileti gönderip) o Çekirdek Veri nesnesi yenilemek gerekiyor uygulamayı anlatan iOS uygulamasında. Aynı yaklaşım, iOS Uygulamasından Saat Uzantısına kadar diğer yöne gitmek için kullanılabilir.

Ayrıca, nesneler gerçekten basitse, CoreData aşırı olabilir. MMWormhole'ı, her iki uçta da kullanılan hafif bir sözlüğü önbelleğe almak için kullanabilirsiniz. Bu yaklaşımı birkaç haftadan beri kullanıyorum ve her iki yönde de kusursuz bir şekilde çalışıyor.

1

Bu durum, bildirim yoluyla iletişim kuramayan farklı yönetilen nesne bağlamları kullandığınız için oluyor. Bu nedenle, NSManagedObjectContextObjectsDidChangeNotification gibi bir bildirim yayınlanmayacaktır çünkü NSNotificationCenter, iOS uygulamanızdaki bildirimi, farklı bellek alanlarında çalışan farklı işlemler olduğundan uzantıya yayınlamayacaktır. Uygulamamda aynı şeylere rastladım. Kullanmadan önce nesneyi yenilemeniz gerekir. Temel olarak, manuel bir hata yapıyorsunuz. Performans için, bunu ne zaman yapacağınızı ve ne zaman yapmayacağınızı bilmek isteyebilirsiniz. Nesneyi [NSManagedObjectContext refreshObject: mergeChanges:]'a geçirerek yenileyebilirsiniz.

+0

Birazdan kendisine başka değişiklikler yapmadan önce nesneyi yenilemek için çalıştı, ancak uygulama halen çöküyor kayıt etmek. – erdekhayser

+0

Çökerken konsolda herhangi bir hata mesajı var mı? –

+0

'Çözülmemiş hata Opsiyonel (hata Alan = NSCocoaErrorDomain Kod = 133.020 "işlem tamamlanmış edilemedi. (Kakao hata 133.020)." ' – erdekhayser

İlgili konular