IOS:创建后台文件用于保存界面输入的信息

本文介绍了一种实现程序启动后自动填充固定信息的方法,通过定义数据模型、编码、解码和复制逻辑,使得输入信息只需保存一次,下次启动程序时无需再次手动输入。以IP地址和端口号为例进行详细说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候我们启动某些程序时总需要先填写一些信息才能进行下一步操作,例如登陆界面必需输入一些基本信息进行验证后才能登陆成功,由于每一次启动后都必需手动输入基本固定的信息,所以我们可以实现输入一次信息之后点击保存,下一次程序启动能显示原先的输入信息,就好像qq的记住用户名和密码一样,保存一次成功后就以后启动程序都无需再进行输入。所以以下我就举输入ip地址和端口号为例简单记录:

(1)ArchivingData.h 的定义:

#import <Foundation/Foundation.h>

@interface ArchivingData : NSObject <NSCoding, NSCopying>


//以下变量名主要用于保存输入信息
@property (copy, nonatomic) NSString *ip;
@property (copy, nonatomic) NSString *port;


@end

(2)ArchivingData.m 的定义

#import "ArchivingData.h"

#define kIdKey @"IdKey"
#define kPortKey @"PortKey"
#define kPasswordKey @"PasswordKey"

@implementation ArchivingData

@synthesize ip;
@synthesize port;

//编码
#pragma mark NSCoding
- (void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeObject:ip forKey:kIdKey];
[aCoder encodeObject:port forKey:kPortKey];

}

//解码
- (id)initWithCoder:(NSCoder *)aDecoder {
if (self = [super init]) {
ip = [aDecoder decodeObjectForKey:kIdKey];
port = [aDecoder decodeObjectForKey:kPortKey];
}
return self;
}

//复制
#pragma mark NSCoping
- (id)copyWithZone:(NSZone *)zone {
ArchivingData *copy = [[[self class] allocWithZone:zone] init];
copy.ip = [self.ip copyWithZone:zone];
copy.port = [self.port copyWithZone:zone];
return copy;
}

@end


(3)viewController.m (ps:只标注核心部分)

#define kArchivingFileKey @"archivingFile"
#define kArchivingDataKey @"ArchivingDataKey"


//---------------该模块声明了读取后台文件的一些变量(Begin)-----------------------//
// 创建文件管理器
NSFileManager *fileManager = [NSFileManager defaultManager];
//获取应用程序沙盒的Documents目录
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
//得到完整的文件名,使用stringByAppendingPathComponent才会在之前的目录基础上加上/
self.archivingFilePath = [documentsDirectory stringByAppendingPathComponent:kArchivingFileKey];
//---------------该模块声明了读取后台文件的一些变量(End)-----------------------//


因为我采用的是tableViewController,所以我在每一个cell中读取后台文件数据进行显示

//如果归档文件存在,则读取其中内容,显示在界面上
if ([fileManager fileExistsAtPath:self.archivingFilePath]) {
NSData *data = [[NSMutableData alloc] initWithContentsOfFile:self.archivingFilePath];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
ArchivingData *archivingData = [unarchiver decodeObjectForKey:kArchivingDataKey];
[unarchiver finishDecoding];
if(row == 0)
[[cell textField ] setText: archivingData.ip];
if(row == 1)
[[cell textField ] setText: archivingData.port];


//保存输入的内容
- (void)applicationWillResignActive:(NSNotification *)notification{
ArchivingData *archivingData = [[ArchivingData alloc] init];
archivingData.ip = ((UITextField *)[dictionary objectForKey:@"ID号"] ).text;
archivingData.port = ((UITextField *)[dictionary objectForKey:@"端口"] ).text;
NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:archivingData forKey:kArchivingDataKey];
[archiver finishEncoding];
[data writeToFile:self.archivingFilePath atomically:YES];
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值