0

いくつかの値を保存するためにplistを作成していますが、テスト中に、アプリケーションを閉じてマルチタスクから削除した後も、新しく作成したplistを保持していることに気付きました。ただし、アプリケーションがマルチタスクから削除された場合はそのplist内の値が失われますが、アプリが閉じられた場合は失われません...

これは、すべての読み取り/書き込み/保存などを管理する、plistコントローラークラスにあるデータの保存メソッドです。

- (void) saveData:(NSString *)methodName signature:(NSString *)pSignature Version:(NSNumber *)pVersion request:(NSNumber *)rNumber dataVersion:(NSNumber *)dvReturned cacheValue:(NSNumber *)cValue;
    {
        // get paths from root direcory
        NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
        // get documents path
        NSString *documentsPath = [paths objectAtIndex:0];
        // get the path to our Data/plist file
        NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"EngineProperties.plist"];

        // set the variables to the values in the text fields
        self.signature = pSignature;
        self.version = pVersion;
        self.request = rNumber;
        self.dataVersion = dvReturned;

        //do some if statment stuff here to put the cache in the right place or what have you.
        if (methodName == @"manu")
        {
            self.man = cValue; 
        }
        else if (methodName == @"models")
        {
            self.mod = cValue;
        }
        else if (methodName == @"subMod")
        {
            self.sub = cValue;
        }

        self.cacheValue = [NSDictionary dictionaryWithObjectsAndKeys:
                           man, @"Manu",
                           mod, @"Models",
                           sub, @"SubModels", nil];


        NSDictionary *plistDict = [NSDictionary dictionaryWithObjectsAndKeys:
                                   signature, @"Signature",
                                   version, @"Version",
                                   request, @"Request",
                                   dataVersion, @"Data Version",
                                   cacheValue, @"Cache Value", nil];



        NSString *error = nil;
        // create NSData from dictionary
        NSData *plistData = [NSPropertyListSerialization dataFromPropertyList:plistDict format:NSPropertyListXMLFormat_v1_0 errorDescription:&error];

        // check is plistData exists
        if(plistData)
        {
            // write plistData to our Data.plist file
            [plistData writeToFile:plistPath atomically:YES];

            NSString *myString = [[NSString alloc] initWithData:plistData encoding:NSUTF8StringEncoding];
            //        NSLog(@"%@", myString);
        }
        else
        {
            NSLog(@"Error in saveData: %@", error);
            //        [error release];
        }
    }


    @end

私の質問には2つの部分があります。アプリがマルチテイクバーから削除された場合でも値がplistに保持されるように、値を保存できますか。これが機能する場合、これを機能させるために何を変更する必要がありますか?

4

1 に答える 1

0

これはおそらく、saveData メソッドが呼び出されている場所に関係しています。アプリのデリゲートを確認してください。デフォルトでいくつかのスタブがあります。おそらく、applicationWillResignActive、applicationDidEnterBackground、または applicationWillTerminate が必要です。それぞれのドキュメントを確認してください。必要なものは、データをいつ書き込むかによって異なります。

于 2012-04-11T03:00:28.343 に答える