我将如何保存和加载 UITextField?

Posted

技术标签:

【中文标题】我将如何保存和加载 UITextField?【英文标题】:How would I save and load a UITextField? 【发布时间】:2011-09-03 08:05:49 【问题描述】:

我到处搜索并尝试了很多代码,但似乎没有什么对我有用。我需要做的就是加载(在 viewDidLoad 上)一个文本字段并在按下按钮时保存它。

最简单的方法是什么?我正在使用单个窗口应用程序,我没有视图控制器(这可能会有所不同?)

谢谢,

詹姆斯

【问题讨论】:

你说“保存”。你说的保存是什么意思?您需要永久保留这些数据吗? 它就像一个笔记应用程序,我需要用户在关闭和打开应用程序时能够保存文本字段,而无需他们做任何事情。 我使用一种推荐的方法得到了这个错误代码:pastie.org/2475070我遵循了这个教程:twitc.com/Pkon7swrQ 【参考方案1】:

使用 SQLite 数据库:

-(IBAction) checkNotes

sqlite3_stmt *statement;

const char *dbpath = [databasePath UTF8String];

if (sqlite3_open(dbpath, &contactDB) == SQLITE_OK)

    NSString *querySQL = [NSString stringWithFormat: @"SELECT Notes FROM NotesTable WHERE UserID = (\"%@\")", userID.text]; 

    const char *query_stmt = [querySQL UTF8String];

    sqlite3_prepare_v2(contactDB, query_stmt, -1, &statement, NULL);

    if (sqlite3_step(statement) == SQLITE_ROW) 

        NSString *notesField = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 0)];

        Notes.text = notesField;

        [notesField release];

    else
        Status.text = @"Not found";

    

    sqlite3_finalize(statement);

sqlite3_close(contactDB);    

您可以尝试一下,然后根据您的需要调整此代码。 要实现 SQLite3,请查看网络。但我想它会在未来对你有很大帮助。我认为这将是最灵活的,因为它还允许您创建关系数据库。

【讨论】:

这很难吗?这需要多长时间? 我忘了提及:为了保存:在这种情况下使用“UPDATE”语句并检查 SQLITE_DONE。上面提到的方法是我将放在 viewDidLoad 方法中的方法。关于在你的项目中初始化数据库,网上有很多资料。 不会很长,相信我 - 你会在一天结束之前得到它;事实上这很容易。这里有一个基于视图的应用程序的教程:techotopia.com/index.php/… 但我也建议你查找更多的网站,以防你没有立即理解一些细节。 这似乎有点难。那么我将如何将数据保存到数据库中,因为您已经让我能够在上面加载? :-) 另外,这是我要遵循的教程(对我来说根本不起作用,因为数据不会加载):mobileorchard.com/how-to-make-an-iphone-app-part-6-saving-data【参考方案2】:

创建一个 NSMutableDictionary 作为属性和 ...

当你的按钮被点击时:

-(IBAction)buttonClicked:(id)sender

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];   
NSString *devicePath = [documentsDirectory stringByAppendingPathComponent:@"yourfile.txt"]; 
[self.dictionary setObject:self.textField.Text key:@"textField"];
[self.dictionary writeToFile:devicePath atomically:YES];

在你的 viewDidLoad 上,你可以通过以下方式获取文件的值:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"youefile"
                                                     ofType:@"txt"];
self.dictioary = [[[NSMutableDictionary alloc] initWithContentsOfFile:filePath] autorelease];

【讨论】:

您好,谢谢! .rtf 文件可以将数据保存到吗? 它不起作用,按下保存按钮时出现 NSException 错误... 可以,只要您正确编码即可。 UTF-8 正常工作。 好的,谢谢。但是现在我有一个 NSException 错误,上面写着; pastie.org/2475172 你知道我该如何解决这个问题吗?【参考方案3】:

使用专门为此场景制作的 NSUserDefaults 类。

NSUserDefaults *defs = [NSUserDefaults standardUserDefaults];

// saving a NSString (you usually do this when the value is being submitted)
[defs setObject:textField.text forKey:@"aKey"];
[defs synchronize]; //this commits the new value - shouldn't be necessary because this is doe automatically, but just in case...

// loading a NSString (you usually do this on viewDidLoad)
testField.text = [defs objectForKey:@"aKey"];

值跨会话存储。 您也可以存储其他值类型(NSString 除外)。 为要存储值的每个字段使用不同的键。 这也可以用于存储应用程序配置/选项/等

【讨论】:

以上是关于我将如何保存和加载 UITextField?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中创建 UITextField 对象数组?

UITextField - 检测内置 iPhone 键盘上的输入?

如何在一个 UITextField 中设置两个不同的 NSUserDefaults

动态更改 UITextField 宽度取决于内容

如何使用 1 UITextField 跟踪 3 个输入字符串

UITextField floatValue 加载 Nib