保存字符串到NSUserDefaults?

如何将字符串保存到NSUserDefaults?

182914 次浏览
NSString *valueToSave = @"someValue";
[[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"preferenceName"];
[[NSUserDefaults standardUserDefaults] synchronize];

然后再拿回来

NSString *savedValue = [[NSUserDefaults standardUserDefaults]
stringForKey:@"preferenceName"];

[[NSUserDefaults standardUserDefaults] setValue:aString forKey:aKey]

更准确地说

-(void)saveToUserDefaults:(NSString*)myString
{
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];


if (standardUserDefaults) {
[standardUserDefaults setObject:myString forKey:@"timestamps"];
[standardUserDefaults synchronize];
}
}

就像这样:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];


// saving an NSString
[prefs setObject:@"TextToSave" forKey:@"keyToLookupString"];

然后检索:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];


// getting an NSString
NSString *myString = [prefs stringForKey:@"keyToLookupString"];

你应该看看苹果的NSUserDefaults类参考,也可以看看这个教程:iPhone编程教程-使用NSUserDefaults保存/检索数据

不要忘记这句话,否则它可能并不总是有效:

[standardUserDefaults synchronize];

一个好的做法是使用一个常量作为键,以避免在不存储和读取相同键的情况下出现错误

NSString* const TIME_STAMPS_KEY = @"TIME_STAMPS_KEY";
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];


// saving an NSString
[prefs setObject:@"TextToSave" forKey:@"keyToLookupString"];


// saving an NSInteger
[prefs setInteger:42 forKey:@"integerKey"];


// saving a Double
[prefs setDouble:3.1415 forKey:@"doubleKey"];


// saving a Float
[prefs setFloat:1.2345678 forKey:@"floatKey"];


// This is suggested to synch prefs, but is not needed (I didn't put it in my tut)
[prefs synchronize];

检索

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];


// getting an NSString
NSString *myString = [prefs stringForKey:@"keyToLookupString"];


// getting an NSInteger
NSInteger myInt = [prefs integerForKey:@"integerKey"];


// getting an Float
float myFloat = [prefs floatForKey:@"floatKey"];

下面是如何对Swift做同样的事情;

var valueToSave = "someValue"
NSUserDefaults.standardUserDefaults().setObject(valueToSave, forKey: "preferenceName")

以后把它拿回来;

if let savedValue = NSUserDefaults.standardUserDefaults().stringForKey("preferenceName") {
// Do something with savedValue
}

在Swift 3.0中

var valueToSave = "someValue"
UserDefaults.standard.set(valueToSave, forKey: "preferenceName")


if let savedValue = UserDefaults.standard.string(forKey: "preferenceName") {


}
-(void)saveToUserDefaults:(NSString*)string_to_store keys:(NSString *)key_for_the_String
{
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];


if (standardUserDefaults) {
[standardUserDefaults setObject:string_to_store forKey:key_for_the_String];
[standardUserDefaults synchronize];
}
}

叫它:

[self saveToUserDefaults:@"string_to_store" : @"key_for_the_string"];

使用以下方法检索字符串:

NSString * stored_string = [[NSUserDefaults standardUserDefaults] stringforkey:key_for_the_String]

用于保存:

[[NSUserDefaults standardUserDefaults]setObject:@"YES" forKey:@"KTerminated"];
[[NSUserDefaults standardUserDefaults]synchronize];

对于检索使用这个:

[[[NSUserDefaults standardUserDefaults]stringForKey:@"KTerminated"] isEqualToString:@"YES"];

对于Swift,我创建了两个函数,它们将从首选项中保存和检索值。

这对你很有帮助。

//保存对象

static func setObject(value:AnyObject ,key:String)
{
let pref = NSUserDefaults.standardUserDefaults()
pref.setObject(value, forKey: key)
pref.synchronize()
}


static func getObject(key:String) -> AnyObject
{
let pref = NSUserDefaults.standardUserDefaults()
return pref.objectForKey(key)!
}

FirstView

    {
NSMutableArray *array; }
- (void)viewDidLoad {
[super viewDidLoad];
array = [[NSMutableArray alloc]init];
array = [[NSUserDefaults  standardUserDefaults]objectForKey:@"userlist"];


NSLog(@"%lu",(unsigned long)array.count);
if (array>0)
{
for (int i=0; i<array.count; i++)
{
NSDictionary *dict1 = @{@"Username":[[array valueForKey:@"Username"] objectAtIndex:i],@"Mobilenumber":[[array valueForKey:@"Mobilenumber"] objectAtIndex:i],@"Firstname":[[array valueForKey:@"Firstname"] objectAtIndex:i],@"Lastname":[[array valueForKey:@"Lastname"] objectAtIndex:i],@"dob":[[array valueForKey:@"dob"] objectAtIndex:i],@"image":[[array valueForKey:@"image"] objectAtIndex:i]};
NSLog(@"%@",dict1);
NSArray *array1 = [[NSArray alloc]initWithObjects:dict1, nil];
[[NSUserDefaults standardUserDefaults] setObject:array1 forKey:@"UserList"];
}


}
}

image picker

     - (void)imagePickerController:(UIImagePickerController *)picker         didFinishPickingMediaWithInfo:(NSDictionary *)info {


UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
self.imaGe.image = chosenImage;


[picker dismissViewControllerAnimated:YES completion:NULL];
}
  • < p > (IBAction) submitBton:发送者(id) {

    NSMutableArray *array2 = [[NSMutableArray alloc]initWithArray:
    [[NSUserDefaults standardUserDefaults]objectForKey:
    @"userlist"]];
    
    
    UIImage *ima = _imaGe.image;
    NSData *imagedata = UIImageJPEGRepresentation(ima,100);
    
    
    NSDictionary *dict =  @{@"Username":_userTxt.text,@"Lastname":_lastTxt.text,@"Firstname":_firstTxt.text,@"Mobilenumber":_mobTxt.text,@"dob":_dobTxt.text,@"image":imagedata};
    
    
    [array2 addObject:dict];
    [[NSUserDefaults standardUserDefaults]setObject:array2
    forKey:@"userlist"];
    NSLog(@"%@",array2);
    
    
    [self performSegueWithIdentifier:@"second" sender:self];
    
    
    }
    
    • < p > (IBAction) chooseImg:发送者(id) {

      UIImagePickerController *picker = [[UIImagePickerController
      . alloc] init); Picker.delegate = self; 选择器。allowsEditing = YES; 选择器。sourceType = < br > UIImagePickerControllerSourceTypePhotoLibrary; [self presentViewController:picker animated:YES completion:NULL]

      } < / p >

    • 李< / ul > < / >

    < p > 第二种观点 { NSMutableArray * arr;} < / p >
    - (void)viewDidLoad {
    [super viewDidLoad];
    
    
    arr =[[NSMutableArray alloc]init];
    arr = [[NSUserDefaults standardUserDefaults]objectForKey:@"userlist"]; }
    
    
    #pragma mark- TableView DataSource
    
    
    -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1; }
    
    
    -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return arr.count; }
    
    
    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *cellId = @"tablecell";
    TableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:cellId];
    cell.userLbl.text =[[arr valueForKey:@"username"] objectAtIndex:indexPath.row];
    cell.ageLbl.text =[[arr valueForKey:@"dob"] objectAtIndex:indexPath.row];
    cell.profileImg.image =[UIImage imageNamed:[[arr valueForKey:@"image"] objectAtIndex:indexPath.row]];
    return cell; }
    

Swift 3更新

func setObject(value:AnyObject ,key:String)
{
let pref = UserDefaults.standard
pref.set(value, forKey: key)
pref.synchronize()
}


func getObject(key:String) -> AnyObject
{
let pref = UserDefaults.standard
return pref.object(forKey: key)! as AnyObject
}

在Swift 4.0.3 Xcode 9

============set  Data in UserDefaults =========


UserDefaults.standard.set(userName, forKey: "userName")
UserDefaults.standard.synchronize()


============Get Data in UserDefaults =========


let userName = UserDefaults.standard.string(forKey: "userName")
print(userName ?? "Gera")


userNameTextField.text = ""+userName!

Swift5和Xcode 10.2

//Save
UserDefaults.standard.set(true, forKey: "Key1") //Bool
UserDefaults.standard.set(1, forKey: "Key2")  //Integer
UserDefaults.standard.set("This is my string", forKey: "Key3") //String
UserDefaults.standard.synchronize()
        

//Retrive
UserDefaults.standard.bool(forKey: "Key1")
UserDefaults.standard.integer(forKey: "Key2")
UserDefaults.standard.string(forKey: "Key3")
            

//Remove
UserDefaults.standard.removeObject(forKey: "Key3")

注意:保存文本数据(意味着字符串,数组,字典等)在UserDefaults。

不要将图片保存在UserDefaults中,不推荐(保存图片在本地目录)。

斯威夫特更新了:

let userID = "BOB"

宣布userDefaults:

let defaults = UserDefaults.standard
defaults.setValue(userID, forKey: "userID")

并得到它:

let userID = defaults.object(forKey: "userID")