0

我正在尝试学习 iOs 编程。我想这是一个相反的问题。

我刚刚在 youtube 上完成了一个教程,使用 Xcode 创建了一个简单的 iPhone 应用程序,它允许您存储、列出和删除 SQLite3 数据库中的数据(因为我想要生成的应用程序需要一个数据库)。

然而,放视频的那个家伙似乎没有解释“为什么”他做了他所做的,所以我现在试图理解每一段代码的作用(我来自 PHP 和 SQL 网络编程背景,所以我了解访问数据库、调用数据行等以在网站上显示内容。)

我不太理解的这个 iOs 位的一部分是使用的 %s 和 %d 值,因为它们似乎没有在任何地方声明。

代码是;

if(sqlite3_open([dbPathString UTF8String], &personDB)==SQLITE_OK) {
        NSString *inserStmt = [NSString stringWithFormat:@"INSERT INTO PERSONS(NAME,AGE) values ('%s', '%d')",[self.nameField.text UTF8String],[self.ageField.text intValue]];

现在 %s 和 %d 清楚地从 self.nameField 和 self.ageField 中获取它们的值。然而,这意味着我只能将两个值提交到一个表中?或者是否有其他值的其他百分比,但肯定有最大值为 26。

如果您能给出任何解释,我将不胜感激。

此外,是否有人对学习 iOS 编码的其他完全解释的方法有任何建议?特别是如果您是第一次学习 iOS 编程且 C 编程技能有限的初学者。我正在寻找的领域是创建一个应用程序,该应用程序将存储一些文本字段和图像,它们将存储在数据库中,图像要么在数据库中,要么作为链接并适当命名。我希望能够操纵图像来调整它的大小,以便它针对 iPhone 显示器进行优化(不需要在 APP 中使用高清图像)稍后我希望能够弄清楚如何上传本地数据库(sqlite3)文件到在线存储(我自己的服务器或保管箱),

4

5 回答 5

1

%s%d分别是以空字符结尾的字符数组和带符号的 32 位整数的格式说明符。您可以在String Programming Guide中找到有关说明符的详细信息。但是,对于 SQLite 语句,您不应该以这种方式格式化字符串,因为这会使您面临 SQL 注入的风险。相反,您应该使用和适当的函数绑定值。对于您的情况,您将使用for和for 。?sqlite3_bind*sqlite3_bind_textNAMEsqlite3_bind_intAGE

于 2012-11-20T21:38:38.417 回答
0

这就是所谓的格式化字符串,基本上,它是一种将值注入字符串的方法。% 符号后面的字符用于指示值应格式化为的数据类型。在您的情况下, %s 用于表示字符串值, %d 用于表示十进制整数值。

这种类型的字符串格式非常常见;许多编程语言提供了一些机制来执行这种类型的字符串格式化,并且格式化符号在很大程度上是标准化的。您可以在 C++ 网站上找到更多信息。

于 2012-11-20T21:39:17.070 回答
0

第1部分:

% 约定“字符串格式说明符”是字符串替换的通用标准。

它们不是变量,而是类型化的替换占位符。

%s --> string
%d --> number

第 2 部分:您可以查看 iTunes U 课程:

Jan Borchers 教授的 iPhone 应用程序编程 '11

https://itunes.apple.com/us/itunes-u/iphone-application-programming/id474416629

于 2012-11-20T21:35:01.437 回答
0

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html

%s 以 Null 结尾的 8 位无符号字符数组。因为 %s 说明符导致字符以系统默认编码解释,所以结果可能是可变的,尤其是对于从右到左的语言。例如,使用 RTL,当字符没有强方向性时,%s 会插入方向标记。因此,最好避免使用 %s 并明确指定编码。

%d, %D 有符号 32 位整数 (int)。

于 2012-11-20T21:35:22.653 回答