Kullanıcıların renkleri adlandırmasına izin veren bir uygulama yapıyorum. Örneğin, kullanıcılar # 00FFFF adını "yeşil" olarak adlandırabilir. Bu adların ve karşılık gelen renklerin Temel Veriler'de saklanması gerekir.Temel Veriler'de anahtar değer çiftleri nasıl kaydedilir?
Bunu yapmanın en iyi yolu, çiftleri anahtar-değer çiftleri olarak kaydetmek, anahtar olarak renk ve değerler olarak isimlerdir. Ancak, yeni bir varlık oluşturduğumda ve iki özelliği eklediğimde, Çekirdek Verilere, rengin "birincil anahtar" veya başka bir şey olduğunu söylemenin bir yolu yok. Ve Core Data'ya bana karşılık gelen isimleri almasını söyleyemem.
Bazı geçici çözümler düşündüm ancak yeterince "hızlı" değiller.
Anahtar değer çiftlerini
NSUserDefaults
'da sözlük olarak kaydedin. Ama oraya sadece[String: AnyObject]
'u kaydedebiliyorum. İhtiyacım olan[Int: String]
. İnekleri dizelere çevirebileceğimi biliyorum, ancak bu sadece kodu daha okunaklı ve hızlı olmayan hale getiriyor. Ayrıca, anahtarın değeriniAnyObject
'danString
'a çevirmem gerek. Bu da sevmediğim başka bir şey. Jenerikler icat edilmemiş gibi.Renk ve adı bir Çekirdek Veri birimine kaydedebilirim. Bir rengin karşılık gelen ismini bulmak istediğimde, her şeyden lineer arama yapıyorum. Bunun gibi
:
for item in allTheColorNames {
if item.color == theStuffIWantToFind {
// do something
break
}
}
ben tek seferde bunu yapmak isterdim. Yukarıdaki kod çok zarif değil, ne demek istediğimi biliyor musun?
Renk Verisi çiftlerini Çekirdek Verilerde saklamak için bir yol var mı, böylece böyle bir şey yapabilirim?
var theNameOfGreen = colorNameDictionary[0x00ff00]
Ancak plist programatik olarak düzenleyebilir misiniz? – Sweeper
Evet, düzenlememe bakın. –
Hmm ... Bu durumda plistleri kullanmak oldukça iyi bir fikir gibi görünüyor.Ama kodunuzu tam olarak anlayamıyorum. Ama yine de fikir için teşekkürler! Plisten biraz daha araştırma yapacağım! – Sweeper