簡體   English   中英

NSUserDefaults不起作用

[英]NSUserDefaults doesn't work

我是編程新手,我有一個問題。 我創建有兩個視圖的應用程序。 首先是tableviewcontroller,其次是視圖控制器。 從第二個視圖,我通過perepareForSegue方法將數據發送到我的tableview中。 我的數據(字符串)是NSMutableArray,我想在我的應用程序appDelegate.m中的didEnterBackgoung之后將這個MutableArray保存到UsedDefault中。然后,我想將其加載回去,但沒有任何反應。 我將代碼放在appDelegate.m的appDidBecomeActive中,並且已經嘗試在第一個視圖viewDidLoad中編寫它,但是沒有任何動作。 新應用啟動后,我的MuttableArray仍然為空。

這是我的代碼:

- (void)applicationDidEnterBackground:(UIApplication *)application
{
NSUserDefaults*defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:self.flipsideView.zoznamFunkcii forKey:@"NSMutableArray"];
[defaults synchronize];
}

flipsideView是我的第一個視圖,而zoznamFunkcii是我的NSMuttable數組

這是我的加載方法:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
NSUserDefaults*defaults = [NSUserDefaults standardUserDefaults];
self.flipsideView.zoznamFunkcii = [NSMutableArray arrayWithArray:[defaults  objectForKey:@"NSMutableArray"]];
}

有人可以幫我嗎? 我不知道為什么它不起作用。

您正在將一個空的NSMutableArray保存到NSUserDefaults。 因此,當然,加載的數組也將為空。

這是帶有注釋的保存代碼:

// overwrite zoznamFunkcii with empty array
self.flipsideView.zoznamFunkcii = [[NSMutableArray alloc]init];

NSUserDefaults*defaults = [NSUserDefaults standardUserDefaults];

// save this empty array to nsuserdefaults
[defaults setObject:self.flipsideView.zoznamFunkcii forKey:@"NSMutableArray"];

您的保存代碼可能應如下所示:

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    NSUserDefaults*defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:self.flipsideView.zoznamFunkcii forKey:@"NSMutableArray"];
}

並且由於NSUserDefault不會保存可變對象,因此您的恢復代碼應如下所示:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    NSUserDefaults*defaults = [NSUserDefaults standardUserDefaults];
    self.flipsideView.zoznamFunkcii = [NSMutableArray arrayWithArray:[defaults objectForKey:@"NSMutableArray"]];
}

如果數組中的對象不是NSDataNSStringNSNumberNSDateNSArrayNSDictionary實例,則必須首先對數組進行編碼。 有關如何執行此操作的詳細信息,請參見此問題

Here you can Save Object With NSUserDefault..

[[NSUserDefaults standardUserDefaults]setObject:[NSKeyedArchiver archivedDataWithRootObject:self.flipsideView.zoznamFunkcii] forKey:@"NSMutableArray"];
    [[NSUserDefaults standardUserDefaults]synchronize];

and you make coder and decoder method

- (id)initWithCoder:(NSCoder *)decoder {
    if (self = [super init]) {
        self.toolResult = [decoder decodeObjectForKey:@"obj1"];
        self.toolNotes = [decoder decodeObjectForKey:@"obj2"];

     }
    return self;
}

- (void)encodeWithCoder:(NSCoder *)encoder {
    [encoder encodeObject:self.toolResult forKey:@"obj1"];
    [encoder encodeObject:self.toolNotes forKey:@"obj2"];

}

your Data Save Into NsuserDefault When you Get Data From NsUserDefault then you Use like
[NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey:@"NSMutableArray"]];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM