在本地保存文件 objective C / ios
Save files locally in objective C / ios
在我目前正在开发的应用程序中,我遇到了 运行 问题。我有几个存储信息的 .plist 文件。当应用程序启动时,它会检查其中一个 plist 文件(从一开始就是空的)是否为空,如果是,它将转到 "user login view"。登录后,plist 文件的内容将被用户名替换。我这样做的原因是因为我不希望用户每次启动应用程序时都必须登录。但这对我不起作用,因为每次我重新启动应用程序(在我的 iphone 和 xcode 模拟器上)所有 plist 文件都已重置。
现在我正在使用函数:
[fileArray writeToFile:currentUserPath atomically:YES];
但是是否有任何其他方法可以写入文件并让它保持原样(直到我更改它),或者它可能是我必须将其放入特定文件夹才能使其工作?
谢谢
您可以尝试使用 NSUserDefaults。
示例:
let userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.setObject("someUserName", forKey: "userLogin")
然后您可以通过这行代码检索此信息:
userDefaults.objectForKey("userLogin") as! String
正如@mikle94 所说,您可以使用 NSUserDefaults.
这是等效的objective-c
代码
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:@"someUserName" forKey:@"userLogin"];
然后通过
检索此信息
NSString *userName = [userDefaults objectForKey:@"userLogin"];
我记得有一次我每次 运行 应用程序时都会重置我的文件。结果证明是我犯了一些简单的错误。
如果你不想使用 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];
}
在我目前正在开发的应用程序中,我遇到了 运行 问题。我有几个存储信息的 .plist 文件。当应用程序启动时,它会检查其中一个 plist 文件(从一开始就是空的)是否为空,如果是,它将转到 "user login view"。登录后,plist 文件的内容将被用户名替换。我这样做的原因是因为我不希望用户每次启动应用程序时都必须登录。但这对我不起作用,因为每次我重新启动应用程序(在我的 iphone 和 xcode 模拟器上)所有 plist 文件都已重置。
现在我正在使用函数:
[fileArray writeToFile:currentUserPath atomically:YES];
但是是否有任何其他方法可以写入文件并让它保持原样(直到我更改它),或者它可能是我必须将其放入特定文件夹才能使其工作?
谢谢
您可以尝试使用 NSUserDefaults。
示例:
let userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.setObject("someUserName", forKey: "userLogin")
然后您可以通过这行代码检索此信息:
userDefaults.objectForKey("userLogin") as! String
正如@mikle94 所说,您可以使用 NSUserDefaults.
这是等效的objective-c
代码
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:@"someUserName" forKey:@"userLogin"];
然后通过
检索此信息NSString *userName = [userDefaults objectForKey:@"userLogin"];
我记得有一次我每次 运行 应用程序时都会重置我的文件。结果证明是我犯了一些简单的错误。
如果你不想使用 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];
}