사용자가 색상을 지정할 수있는 앱을 만들고 있습니다. 예를 들어, 사용자는 # 00FFFF를 "green"으로 지정할 수 있습니다. 이 이름과 해당 색상을 Core Data에 저장해야합니다.
이를 수행하는 가장 좋은 방법은 쌍을 키-값 쌍으로 저장하는 것입니다. 색상은 키로, 이름은 값으로 저장합니다. 그러나 새 엔터티를 만들고 두 속성을 추가 할 때 Core Data에 색상이 "기본 키"또는 그 밖의 것임을 알릴 방법이 없습니다. 그리고 Core Data에게 해당 이름을 알려달라고 말할 수 없습니다.
몇 가지 해결 방법을 생각했지만 충분히 "빠르지"않습니다.
키-값 쌍을 NSUserDefaults
. 하지만 나는 [String: AnyObject]
거기 에만 저장할 수 있습니다 . 내가 필요한 것은 [Int: String]
. int를 문자열로 변환 할 수 있다는 것을 알고 있지만 코드를 더 읽기 어렵고 신속하지 않게 만듭니다. 또한, 나는에서 키에 대한 값을 캐스팅 할 필요 AnyObject
에 String
내가 좋아하지 않는 또 다른 일이다. 제네릭이 발명되지 않은 것과 같습니다.
Core Data 엔터티에 색상과 이름을 저장할 수 있습니다. 색상에 해당하는 이름을 찾으려면 전체를 선형 검색합니다.
이렇게 :
for item in allTheColorNames {
if item.color == theStuffIWantToFind {
// do something
break
}
}
한 번에 할 수 있으면 좋겠어요. 위의 코드는 그다지 우아하지 않습니다. 무슨 말인지 아십니까?
이런 식으로 할 수 있도록 Core Data에 색상 이름 쌍을 저장하는 방법이 있습니까?
var theNameOfGreen = colorNameDictionary[0x00ff00]
Dmytro가 권장하는 것은 Core Data에서이를 수행하는 올바른 방법이어야합니다. 나는 그것이 매우 쉬울 수있는 것에 대해 많은 오버 헤드를 생성한다고 주장 할 것이다. 속성 목록에 저장하지 않는 이유는 무엇입니까? Xcode에서 하나를 만들고 사전을 추가하고 키 이름과 해당 색상을 값으로 지정하십시오.
plist 파일에서 사전을로드하려면 :
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as NSArray
let documentsDirectory = paths.objectAtIndex(0)as NSString
let path = documentsDirectory.stringByAppendingPathComponent("MyFile.plist")
let fileManager = NSFileManager.defaultManager()
// Check if file exists
if(!fileManager.fileExistsAtPath(path))
{
// If it doesn't, copy it from the default file in the Resources folder
let bundle = NSBundle.mainBundle().pathForResource("DefaultFile", ofType: "plist")
fileManager.copyItemAtPath(bundle, toPath: path, error:nil)
}
var data = NSMutableArray(contentsOfFile: path)
사전을 plist 파일에 저장하려면 :
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as NSArray
let documentsDirectory = paths.objectAtIndex(0) as NSString
let path = documentsDirectory.stringByAppendingPathComponent("MyFile.plist")
data.writeToFile(path, atomically: true)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다