繁体   English   中英

在目标C / ios中本地保存文件

[英]Save files locally in objective C / ios

在我目前正在开发的应用程序中,我遇到了问题。 我有几个存储信息的.plist文件。 当应用启动时,它会检查一个plist文件(从头开始是空的)是否为空,如果为空,它将进入“用户登录视图”。 登录后,plist文件的内容将被用户名替换。 我这样做的原因是因为我不希望用户每次启动应用程序时都必须登录。 但这对我不起作用,因为每次我重新启动应用程序(在我的iPhone和Xcode模拟器上)时,所有plist文件都已重置。

现在我正在使用该功能:

[fileArray writeToFile:currentUserPath atomically:YES];

但是还有其他方法可以写入文件并保持该状态(直到我更改它),还是我必须放入一个特定的文件夹才能使其正常工作?

谢谢

正如@ mikle94所说,您可以使用NSUserDefaults

这是等效的objective-c代码

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:@"someUserName" forKey:@"userLogin"];

然后通过以下方式检索此信息

NSString *userName = [userDefaults objectForKey:@"userLogin"];

您可以尝试改用NSUserDefaults

例:

let userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.setObject("someUserName", forKey: "userLogin")

然后,您可以通过以下代码行检索此信息:

userDefaults.objectForKey("userLogin") as! String

我记得每次运行该应用程序时都会重置文件。 原来这是我犯的一些简单错误。

如果不想使用NSUserDefaults,可以执行以下操作:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

NSFileManager   *fileManager = [NSFileManager defaultManager];
NSString        *filePath = [[[self applicationDocumentsDirectory] path] stringByAppendingString:@"/repository"];
NSArray         *fileArray = …  // Your data
NSError         *error = nil;
NSData          *fileData = [NSPropertyListSerialization dataFromPropertyList:fileArray format:NSPropertyListBinaryFormat_v1_0 errorDescription:&error];

if ([fileManager fileExistsAtPath:filePath] == NO)
    {
    [fileManager createFileAtPath:filePath contents:fileData attributes:nil]
    }
else
    {
    [fileData writeToFile:filePath atomically:NO];
    }
}

/**
 Returns the URL to the application's Documents directory.
 */
- (NSURL *)applicationDocumentsDirectory
{
return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM