IOS/Objective-C:NSUserDefaults 的类型强制
IOS/Objective-C: Type Enforcement for NSUserDefaults
如果将整数保存为 NSUserDefault,是否可以将其作为字符串和数字检索?
//Set
[prefs setInteger:99 forKey:@"userid"];
//Get
NSNumber *useridnum =[[NSUserDefaults standardUserDefaults] valueForKey:@"userid"];//seems to work
NSString *userid =[[NSUserDefaults standardUserDefaults] valueForKey:@"userid"];//seems to work
我本以为不会,但除非我遗漏了什么,否则这似乎是可能的。
感谢您对此的任何澄清。
你的 userid
字符串实际上是一个 NSNumber
,你只是在欺骗编译器并告诉它它是一个 NSString
。如果您尝试调用 NSString
而不是 NSNumber
的方法,那么它将在运行时崩溃。
但是,您可以告诉用户默认值使用 stringForKey:
方法将值检索为字符串,即使您最初将值存储为 return 和 NSString
一个整数。
NSString *userid = [[NSUserDefaults standardUserDefaults] stringForKey:@"userid"]; // actually a string
来自 Apple 文档:
Given a key that identifies an attribute or to-one relationship, return the attribute value or the related object. Given a key that identifies a to-many relationship, return an immutable array or an immutable set that contains all of the related objects.
- (nullable id)valueForKey:(NSString *)key;
[[NSUserDefaults standardUserDefaults] valueForKey:@"userid"]
将 return 一个 id
类型的变量。您可以将其分配给您想要的任何类型。如果你觉得这样不安全,你可以尝试转换成你想要的类型。
如果将整数保存为 NSUserDefault,是否可以将其作为字符串和数字检索?
//Set
[prefs setInteger:99 forKey:@"userid"];
//Get
NSNumber *useridnum =[[NSUserDefaults standardUserDefaults] valueForKey:@"userid"];//seems to work
NSString *userid =[[NSUserDefaults standardUserDefaults] valueForKey:@"userid"];//seems to work
我本以为不会,但除非我遗漏了什么,否则这似乎是可能的。
感谢您对此的任何澄清。
你的 userid
字符串实际上是一个 NSNumber
,你只是在欺骗编译器并告诉它它是一个 NSString
。如果您尝试调用 NSString
而不是 NSNumber
的方法,那么它将在运行时崩溃。
但是,您可以告诉用户默认值使用 stringForKey:
方法将值检索为字符串,即使您最初将值存储为 return 和 NSString
一个整数。
NSString *userid = [[NSUserDefaults standardUserDefaults] stringForKey:@"userid"]; // actually a string
来自 Apple 文档:
Given a key that identifies an attribute or to-one relationship, return the attribute value or the related object. Given a key that identifies a to-many relationship, return an immutable array or an immutable set that contains all of the related objects.
- (nullable id)valueForKey:(NSString *)key;
[[NSUserDefaults standardUserDefaults] valueForKey:@"userid"]
将 return 一个 id
类型的变量。您可以将其分配给您想要的任何类型。如果你觉得这样不安全,你可以尝试转换成你想要的类型。