NSUserDefaults - 키가 존재하는지 확인하는 방법
앱을 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.NSUserDefaults
데이터 지속성입니다.이름이나 숫자 등 몇 가지만 기록하면 되므로 단순하게 유지하는 것이 좋을 것 같습니다.
참고용으로 이 페이지를 찾았는데, 제 질문에 답할 수 없을 것 같아요.기본적으로 값(또는 키)이 이미 존재하는지 여부를 확인할 수 있어야 합니다.NSUserDefaults
그리고 거기에 맞는 일을 하는 거죠.
예: 가: : 할 때합니다.앱이 부팅되고 처음 부팅하는 경우 환영 알림을 출력합니다.을 연 인지 알 수 은 '개봉하다'입니다.UserDefaults
확인하겠습니다.
§ 2 : "안녕하세요 [이름] (이름)라고 표시되어 있습니다.성함헬로 월드이미 이름을 입력했는지 확인하고 그에 따라 행동해야 합니다.이름은 다음 위치에 저장됩니다.NSUserDefaults
.
도와줄까?정말 감사합니다!
objectForKey:
nil
약약만면면면면 면
위에서 설명한 바와 같이 0/NO가 유효한 값이 될 수 있는 원시 유형에서는 작동하지 않습니다.이 코드를 사용하고 있습니다.
NSUserDefaults *defaults= [NSUserDefaults standardUserDefaults];
if([[[defaults dictionaryRepresentation] allKeys] containsObject:@"mykey"]){
NSLog(@"mykey found");
}
objectForKey:
됩니다.nil
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★다음은 값이 0인지 여부를 확인하는 간단한 IF/THEN 테스트입니다.
if([[NSUserDefaults standardUserDefaults] objectForKey:@"YOUR_KEY"] != nil) {
...
}
Swift 3/4:
다음으로 UserDefaults를 통해 액세스되는 다른 유형의 Optional-Return 동작을 모방한 Int/Double/Float/Bool 키 값 유형의 간단한 확장을 나타냅니다.
(2018년 8월 30일 편집: Leo의 제안에 따라 보다 효율적인 구문으로 업데이트됨)
extension UserDefaults {
/// Convenience method to wrap the built-in .integer(forKey:) method in an optional returning nil if the key doesn't exist.
func integerOptional(forKey: String) -> Int? {
return self.object(forKey: forKey) as? Int
}
/// Convenience method to wrap the built-in .double(forKey:) method in an optional returning nil if the key doesn't exist.
func doubleOptional(forKey: String) -> Double? {
return self.object(forKey: forKey) as? Double
}
/// Convenience method to wrap the built-in .float(forKey:) method in an optional returning nil if the key doesn't exist.
func floatOptional(forKey: String) -> Float? {
return self.object(forKey: forKey) as? Float
}
/// Convenience method to wrap the built-in .bool(forKey:) method in an optional returning nil if the key doesn't exist.
func boolOptional(forKey: String) -> Bool? {
return self.object(forKey: forKey) as? Bool
}
}
이들은 이제 다른 기본 제공 get 메서드(문자열, 데이터 등)와 함께 더 일관성이 있습니다.기존 메서드 대신 get 메서드를 사용합니다.
let AppDefaults = UserDefaults.standard
// assuming the key "Test" does not exist...
// old:
print(AppDefaults.integer(forKey: "Test")) // == 0
// new:
print(AppDefaults.integerOptional(forKey: "Test")) // == nil
UserDefaults
to dosolution: 이 솔루션을 하지 않는 :
extension UserDefaults {
func hasValue(forKey key: String) -> Bool {
return nil != object(forKey: key)
}
}
// Example
UserDefaults.standard.hasValue(forKey: "username")
"objectForKey가 존재하지 않으면 0을 반환합니다."또한 값이 0인 정수 또는 부울(부울의 경우 FALSE 또는 NO)인 경우에도 0을 반환합니다.
시뮬레이터로 5.1과 6.1을 테스트했습니다.즉, "객체"를 요청하여 정수 또는 부울란을 실제로 테스트할 수 없습니다."not set"이 "0"으로 설정된 것처럼 처리해도 상관없는 경우 정수에 대해 이 문제를 해결할 수 있습니다.
키를 설정하지 않은 상태에서 objectForKey가 0을 반환하는지 여부를 확인하고 키를 설정했지만 NO로 설정한 경우에도 0을 반환하는 것을 알아차리지 못하는 등 이미 테스트한 사람들은 잘못된 부정적인 측면에 속은 것으로 보입니다.
자신의 문제로 인해 여기로 보내진 결과, 원하는 기본값이 NO로 설정된 값과 일치하도록 부울의 의미를 변경하게 되었습니다.이것이 옵션이 아닌 경우 부울 이외의 것으로 저장하고 YES, NO 및 "not set"을 구분할 수 있는지 확인해야 합니다.
방금 이 일을 겪었는데, 당신의 모든 답변이 저를 위해 좋은 해결책을 찾는데 도움이 되었습니다.나는 단지 읽고 이해하기 힘들다는 이유로 제시된 길을 가는 것을 거부했다.
내가 한 일은 이렇다.'_talkative'라는 변수로 BOOL을 가지고 다녔어요
디폴트(NSUserDefaults) 오브젝트를 설정할 때는 오브젝트로 설정하고, 그 오브젝트가 제로인지 아닌지를 테스트할 수 있습니다.
//converting BOOL to an object so we can check on nil
[defaults setObject:@(_talkative) forKey:@"talkative"];
그리고 그게 존재하는지 확인하러 갔을 때, 나는 다음과 같이 말했다.
if ([defaults objectForKey:@"talkative"]!=nil )
{
그런 다음 BOOL로 객체를 사용했습니다.
if ([defaults boolForKey:@"talkative"]) {
...
제 경우에는 이게 효과가 있는 것 같아요.좀 더 시각적으로 이해가 되더라고요
이 작은 크럼펫을 사용해 보세요.
-(void)saveUserSettings{
NSNumber* value;
value = [NSNumber numberWithFloat:self.sensativity];
[[NSUserDefaults standardUserDefaults] setObject:value forKey:@"sensativity"];
}
-(void)loadUserSettings{
NSNumber* value;
value = [[NSUserDefaults standardUserDefaults] objectForKey:@"sensativity"];
if(value == nil){
self.sensativity = 4.0;
}else{
self.sensativity = [value floatValue];
}
}
모든 것을 하나의 물건으로 취급한다.나한테는 효과가 있는 것 같아.
빠른 버전 입수 가능Bool?
NSUserDefaults.standardUserDefaults().objectForKey(DefaultsIsGiver) as? Bool
Swift3에서는 이 방법으로 사용하고 있습니다.
var hasAddedGeofencesAtleastOnce: Bool {
get {
return UserDefaults.standard.object(forKey: "hasAddedGeofencesAtleastOnce") != nil
}
}
그것을 여러 번 사용한다면 답은 훌륭하다.
도움이 되었으면 합니다:)
Swift 3.0
if NSUserDefaults.standardUserDefaults().dictionaryRepresentation().contains({ $0.0 == "Your_Comparison_Key" }){
result = NSUserDefaults.standardUserDefaults().objectForKey(self.ticketDetail.ticket_id) as! String
}
언급URL : https://stackoverflow.com/questions/1964873/nsuserdefaults-how-to-tell-if-a-key-exists
'programing' 카테고리의 다른 글
다트 목록에서 중복된 항목을 삭제하려면 어떻게 해야 합니까?list.filength()를 선택합니다. (0) | 2023.04.18 |
---|---|
예쁜 Git 분기 그래프 (0) | 2023.04.18 |
앱스토어 앱 링크 방법 (0) | 2023.04.18 |
반환 값을 사용하여 스토어드 프로시저를 호출합니다. (0) | 2023.04.13 |
PowerShell 복사 스크립트에서 여러 문자열을 적절하게 필터링하는 방법 (0) | 2023.04.13 |