2012-05-02 23 views
10

Uygulamam birçok uygulamaya benziyor - kullanıcının bir kullanıcı adı ve parola girdiği bir oturum açma ekranı ve bir oturum açma düğmesi var. Uygulamam, çoğu Kullanıcının iş nesneleri, elbette ki kullanıcıya özgüdür.Çok kullanıcılı bir veritabanıyla nasıl başa çıkılır

Kullanıcıları etkinleştirmek için bir çıkış düğmem var. Bu çok fazla olmaz, ama yine de gereklidir).

Farklı bir kullanıcı oturum açtığında, belirli verilerini almam gerekiyor. Ama nasıl yaparım?
Bir kullanıcı veritabanını imzaladıktan sonra silmek istemiyorum, diğer kullanıcılar cihazdan giriş yapsa bile kaydetmek istiyorum.

Düşünebildiğim tek şey, Çekirdek Veriler ile kaydettiğim her Varlığa bir "ownerId" özniteliği eklemek ve bu özniteliği, nesneleri getirdiğimde bir yüklem olarak kullanmaktır.
Ama bu sadece çok dağınık görünüyor.

cevap

21

iOS, çoklu kullanıcı kavramına sahip değildir, bu nedenle "giriş", uygulamanızın kapsamı ile sınırlı olacaktır. En basit çözüm, her kullanıcı için kalıcı mağaza için farklı bir dosya adı kullanmak olacaktır. Bu sadece bir yerde (temel veri kümenizi kurduğunuz yerde) türetilir, böylece uygulamak oldukça kolaydır.

Standart çekirdek veri şablonunda, kalıcı mağaza konumu, uygulama temsilcisinin persistentStoreCoordinator yönteminin içinde ayarlanır.

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"coreDataTemplate.sqlite"]; 

Bu temelde veri belgeler dizininde bir sqlite veritabanı dosyasında saklanacak ve dosya coreDataTemplate.sqlite adı verilecek anlamına gelir: Bu çizgidir.

Bu kodun gerçekleştirilmesinden önce kullanıcının oturum açtığını ve kullanıcı kimliklerini bir listeye göre işaretlediğini ve bunlar için benzersiz bir tanımlayıcı ile geldiğinizi varsayarsak. Ayrıca, tanımlayıcının kullanıcı varsayılanlarında saklandığını varsayalım. çizgi için yukarıdaki

Değişimi:

NSString *userIdentifier = [[NSUserDefaults standardUserDefaults] stringForKey:@"loggedOnUserID"];  
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:[NSString stringWithFormat:@"%@_coreDataTemplate.sqlite",userIdentifier]]; 

Bu şimdi kullanıcı için size benzersiz bir dosya adı verecektir.

Kullanıcıları değiştirirseniz, geçerli yönetilen nesne bağlamını kaydetmeniz, ardından kalıcı mağaza koordinatörü ve uygulama temsilcisinin yönetilen nesne bağlamını sıfır olarak ayarlamanız gerekir. Yeniden erişildiklerinde, yeni kullanıcı kimliğinin altında olacaktır.

+0

xCode çekirdek veri şablonunu kullanıyorum, bu yüzden nerede ve nasıl farklı bir dosya adı kullanacağımı bilmiyorum, ancak çok iyi bir çözüm gibi geliyor. Kalıcı mağazayı "sıfırla" ve farklı bir dosya adına göre nasıl yüklerim? – Eyal

+0

Yapacak, ama birkaç saatliğine olmayacak. – jrturton

+0

Çok teşekkürler, bekleyeceğim :) – Eyal