17

以前の(関連する)質問に対する回答を得ることができなかったので、少し言い換えれば何か助けになるのではないかと思います。

NSKeyedArchiverを使用していくつかの複雑なオブジェクトをエンコードし、ディスクに保存しています。言ってやるが-

Class member {
    int *id;
    NSString *name;
    NSMutableArray *array;
    TempClass *object;
}

私が構築しようとしている機能は、ユーザーが自分の作業を保存できるようにすることです。たとえば、新しいメンバーを作成して後で戻ってくることができます。ユーザーが終了したら、[投稿]をクリックすると、データがWebサービスに送信されます。そうでない場合は、[保存]をクリックして画面を離れるとデータが保持されるため、ユーザーが戻ってきた時点からアプリを再開できます。さて、データをWebサービスに投稿した後は、データをディスクに保持したくなく、削除する方法を見つけることができません。

これで、エンコードクラスとデコードクラスは正常に機能しています。NSKeyedArchiverを使用してデータをディスクに保存し、NSKeyedUnarchiverを使用してデータを取得できます。しかし、私の質問は、不要になったデータを削除するにはどうすればよいですか?ディスク上のファイルを手動で削除する必要がありますか?NSKeyedUnarchiverに返されるデータを削除させる方法はありますか?

ありがとう、
テジャ。

4

5 に答える 5

23

データを投稿したら、プログラムで削除する非常に簡単な方法:

- (BOOL) deleteFile:(NSString *) pathOfFileToDelete error:(NSError *)err {
    BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath: pathOfFileToDelete];
    if(exists) { 
        [[NSFileManager defaultManager]removeItemAtPath: pathOfFileToDelete error:err];
    }
    return exists;
}
于 2010-07-25T11:53:23.793 に答える
8

Swift3の例:

do {
 try FileManager.default.removeItem(atPath: path)
} catch {
 // catch potential error
}
于 2017-07-13T10:12:30.913 に答える
5

Swift 2.0の場合:

func deleteFile(path: String) -> Bool{
    let exists = NSFileManager.defaultManager().fileExistsAtPath(path)
    if exists {
        do {
            try NSFileManager.defaultManager().removeItemAtPath(path)
        }catch let error as NSError {
            print("error: \(error.localizedDescription)")
            return false
        }
    }
    return exists
}
于 2016-03-04T13:31:13.673 に答える
3

Swift 3.0-> 4.1の場合:

let fileManager = FileManager()
let fileName = "your_file_name"

//In Order to get your file path correctly
getFileURL(_ fileName: String) -> String? {
    let fileURL = fileManager.urls(for: fileManager.SearchPathDirectory.documentDirectory, in: fileManager.SearchPathDomainMask.userDomainMask).first
    return (fileURL?.appendingPathComponent(fileName).path)
}


//Persist Data
func persistData(_ data : Data) -> Bool{
     return NSKeyedArchiver.archiveRootObject(data, toFile: getFileURL(fileName)!)
}

//Get Persisted Data
func getArchivedData() -> Data?{
    return NSKeyedUnarchiver.unarchiveObject(withFile: getFileURL(fileName)!) as? Data
}

//Delete Persisted Data 
func deleteArchivedUser() -> Bool{
    do {
        try fileManager.removeItem(atPath: getFileURL(fileName)!)
        return true
    } catch _ {
        return false
    }
}
于 2018-10-05T08:41:04.130 に答える
2

Swift 2.0の場合:

do {
  try NSFileManager.defaultManager().removeItemAtPath("Your_PATH")
} catch {

}
于 2015-12-18T11:36:17.553 に答える