- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在向 NSMutableArray
或 NSMutableDictionary
添加阿拉伯字符串时遇到问题。
例子:
NSMutableDictionary *data = [[NSMutableDictionary alloc]init];
[data setObject:@"فرسان" forKey:@"name"];
NSLog(@"%@",data);
输出:
2012-01-18 21:55:05.646 aa[367:207] {
name = "\U0641\U0631\U0633\U0627\U0646";
}
我的问题正是我将此数据保存到 sqlite [data objectForKey:@"name"] 它已保存\U0641\U0631\U0633\U0627\U0646 并且当获取数据以将其放入 UILabel 或类似的文本时\U0641\U0631\U0633\U0627\U0646
有什么帮助吗?谢谢:)
- (void)SaveMessage {
NSMutableDictionary *TableProperties = [[NSMutableDictionary alloc]init];
[TableProperties setObject:@"INSERT" forKey:@"Operation"];
[TableProperties setObject:@"savedmessages" forKey:@"tableName"];
NSString *string = [[NSString alloc]initWithFormat:@" %@",MessageBox.text];
[TableProperties setValue:string forKey:@"message"];
NSString *msgResult;
NSArray *result = [[DatabaseFunctions database] DataBaseOperation:TableProperties];
if ([[result objectAtIndex:0] isEqualToString:@"Done"])
msgResult = @"تم حفظ الرسالة بنجاح";
else
msgResult = @"لم تت العملية بنجاح حاول لاحقا";
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"حفظ الرسالة"
message:msgResult
delegate:self
cancelButtonTitle:@"موافق"
otherButtonTitles:nil, nil ];
[alert show];
- (NSArray *)DataBaseOperation:(NSMutableDictionary *)TableProperties{
NSMutableArray *retval = [[NSMutableArray alloc] init];
NSString *Operation = [TableProperties objectForKey:@"Operation"];
if ([Operation isEqualToString:@"SELECT" ]) {
NSString *tableColumns = [TableProperties objectForKey:@"tableColumns"];
NSString *tableName = [TableProperties objectForKey:@"tableName"];
NSString *tableWhere = [TableProperties objectForKey:@"tableWhere"];
NSString *tableOrder = [TableProperties objectForKey:@"tableOrder"];
NSString *tableLimit = [TableProperties objectForKey:@"tableLimit"];
NSString *Query;
if ([tableLimit isEqualToString:@"NO"]) {
Query = [[NSString alloc] initWithFormat:@"SELECT %@ FROM %@ WHERE %@ ORDER BY %@",
tableColumns,tableName,tableWhere,tableOrder,tableLimit];
}else{
Query = [[NSString alloc] initWithFormat:@"SELECT %@ FROM %@ WHERE %@ ORDER BY %@ LIMIT %@",
tableColumns,tableName,tableWhere,tableOrder,tableLimit];
}
NSArray *FieldArray = [[TableProperties objectForKey:@"tableColumns"] componentsSeparatedByString:@","];
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(_database, [Query UTF8String], -1, &statement, nil) == SQLITE_OK) {
while (sqlite3_step(statement) == SQLITE_ROW) {
NSMutableDictionary *Row = [[NSMutableDictionary alloc]init];
NSString *uniqueId = [[NSString alloc] initWithFormat:@"%i",sqlite3_column_int(statement, 0)];
[Row setObject:uniqueId forKey:@"uniqueId"];
for (int i = 1; i<[FieldArray count]; i++) {
NSString *column = [[NSString alloc] initWithUTF8String:(char *) sqlite3_column_text(statement, i)];
[Row setObject:column forKey:[FieldArray objectAtIndex:i]];
}
Objects *rowOfTable = [[Objects alloc] initSelectDataFromTables:Row];
Row = nil;
[retval addObject:rowOfTable];
}
sqlite3_finalize(statement);
}
}
else if([Operation isEqualToString:@"INSERT" ]) {
NSString *tableName = [TableProperties objectForKey:@"tableName"];
[TableProperties removeObjectForKey:@"Operation"];
[TableProperties removeObjectForKey:@"tableName"];
NSArray *Columns = [TableProperties allKeys];
NSArray *Values = [TableProperties allValues];
NSString *Query = [[NSString alloc] initWithFormat:@"INSERT INTO %@ %@ VALUES %@",tableName,Columns,Values];
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(_database, [Query UTF8String], -1, &statement, nil) == SQLITE_OK)
if (SQLITE_DONE!=sqlite3_step(statement)){
NSLog(@"Error when inserting %s",sqlite3_errmsg(_database));
[retval addObject:@"Error"];
}else{
NSLog(@"Data inserted Successfully");
[retval addObject:@"Done"];
}
else{
NSLog(@"Error when inserting %s",sqlite3_errmsg(_database));
[retval addObject:@"Error"];
}
sqlite3_finalize(statement);
}
return retval;
最佳答案
当您使用 %@
记录对象时,NSLog
会向对象发送 description
消息并打印结果字符串。
NSDictionary
通过以“安全”格式编码其键和值来响应 description
消息,使用 \U## 转义非 ASCII 字符##
代码。
如果您将阿拉伯字符串直接传递给 NSLog
,它只会打印不带转义码的字符串:
NSMutableDictionary *data = [[NSMutableDictionary alloc]init];
[data setObject:@"فرسان" forKey:@"name"];
NSLog(@"data = %@",data);
NSLog(@"string = %@", [data objectForKey:@"name"]);
输出:
2012-01-18 14:17:42.498 Animal[62723:f803] {
name = "\U0641\U0631\U0633\U0627\U0646";
}
2012-01-18 14:17:42.500 Animal[62723:f803] فرسان
如果您不喜欢 NSDictionary
响应 description
的方式,您将不得不编写自己的方法将字典格式化为字符串并使用它来记录你的字典。
我查看了您发布的与 sqlite 对话的源代码。问题是您正在使用 %@
格式说明符将值数组 ([TableProperties allValues]
) 转换为字符串。这会将 description
方法发送到 NSArray
,它返回一个字符串。就像 NSDictionary
一样,NSArray
以“安全”格式格式化描述字符串,使用 \U####
代码转义非 ASCII 字符.
您需要编写自己的方法来获取数组并将其转换为字符串并且不会对特殊字符进行转义。 (不过它需要转义引号。)
关于iphone - NSMutableArray 或 NSMutableDictionary 中的阿拉伯字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8916635/
设置 我有一个 NSMutableDictionary,其中包含超过 800 个代表员工的 NSMutableDictionaries。我正在尝试实现一个搜索栏,但在使用我的词典时遇到严重问题。 在第
我有一个 NSMutableDictionary,其中的每个元素都是另一个字典。将其内容复制到另一个 NSMutableDictionary 的最佳方式是什么?我试过使用: firstDictiona
我有 2 个 NSMutableDictionaries,每个都有 5 个 NSArray, 这 2 个 NSMutableDictionaries 有完全相同的 5 个键和 NSArray,但内容不
将 NSMutableDictionary 添加到 NSMutableDictionary 是创建副本还是保留指针。 我希望能够更新第一个 NSMutableDictionary 的内容并在另一个 N
所以我有三个像这样的 NSMutableDictionary: .h文件 NSMutableDictionary *myContainer; NSMutableDictionary *myD1; NS
我想将 NSMUtableDictionary 值复制到另一个 NSMutableDictionary 中。我怎样才能做到这一点? 这是我的代码, PersonClass.h file: NSMu
仍在此处学习 Objective-C/iPhone SDK。我想我知道为什么这不起作用,但我只是想确认一下。 在awakeFromNib中,如果我使用[[NSMutableDictionary all
我在这个数组中有一个 NSArray 和 NSMutableDictionary 对象,如下所示。我想在这个数组的索引:2 处得到一个对象,并将来自以下数组的 NSMutableDictionary
要创建一个空字典,我应该调用 [NSMutableDictionary dictionary] 还是 [[NSMutableDictionary alloc] init]? 有什么区别? 最佳答案 [
对于存储在 NSMutableDictionary 中的字母表中的每个字母,我有 5 个 UIImageView。 5 而不是 1,以防万一他们想要拼写的单词需要更多相同的字母。 我正在创建这样的字母
一旦 NSMutableDictionary 已经达到对象的容量限制,当您尝试添加到它时会发生什么?这会撞出一个还是会抛出异常?当我添加一个新的字典对象时,有没有办法让它撞出最旧的字典对象? 最佳答案
我有 NSMutableDictionary *mutDic; 它加载了来自其他NSMutableDictionary的一些值从警报中我试图更新其值 - (void)alertView:(UIAler
在我的 iPhone 应用程序中,我使用整数来跟踪大量变量。我在我的 AppDelegate 文件(它是一个多 View 应用程序)中声明并初始化了它们,然后如果我在其他 View (类)中声明它们,
我有一个递归函数,可以将以前的字典添加到新字典中,但使用 addEntriesFromDictionary 会出现错误 这是我的示例代码(已编辑) func fetchAllSWApiList
我有一个应用程序可以从 Web 服务下载信息并将其缓存在内存中。具体来说,我的单例缓存类包含一个实例变量 NSMutableDictionary *memoryDirectory,它包含所有缓存数据。
我今天遇到了一个策略错误。我有一个 NSArray 和一个 NSMutableDictionary。问题是我的 NSMutableDictionary 变成了一个数组。这是代码: 标题: NSArra
我的 iOS 应用程序中有以下方法。声明: GMSMarker *marker = [places objectForKey:place]; 并不总能找到关键的对象,当我明确知道有一个对象要找到时。
我有两个 NSMutableDictionay,我们将预期的一个称为“A”,将操作结果的一个称为“B” 我想将“A”和“B”之间的差异插入“C”NSMutableDictionary。 我使用 if
我有一个日期选择器和一个 UIBarButtonItem,当按下 UIBarButtonItem 时,它会调用一个方法将所选日期添加到 NSMutableDictionary。代码如下所示: diar
我在 NSMutableDictionary 中面临非常奇怪的问题。请看下面的代码。 NSMutableDictionary *dict=[[NSMutableDictionary alloc]in
我是一名优秀的程序员,十分优秀!