2013-03-05 263 views
0

我拉出一些语言句子(以不同的语言),并在TableView中显示它们(每行最多5行),当用户点击任意行时,我将用户导航到新的屏幕并在那里显示全文。使用NSISOLatin1StringEncoding转换语言字符[ios]

我遇到的问题是,它需要太多时间才能将字符转换为在设备上正确可见。

我写了下面的代码将JSON文本转换为每一行:

NSString *msgDesc = [myContentsArray objectAtIndex:indexPath.row]; 

char const *cStr = [msgDesc cStringUsingEncoding:NSISOLatin1StringEncoding]; 

msgDesc = [NSString stringWithCString: cStr encoding:NSUTF8StringEncoding]; 

感谢您的帮助。

问候,

里诺·琼斯

+0

请显示您的“索引路径行”方法的代码。 – dasblinkenlight 2013-03-05 21:04:47

+0

我已经在上面发布了。 – 2013-03-05 21:05:47

回答

2

由于转换花费的时间太长,你应该把它从你的tableView:cellForRowAtIndexPath:方法转移到了这一点,从它的数据源会将数据的代码,做转换那里,并存储以供将来使用。

添加NSMutableArray *myContentsArrayConverted到您的类,然后将所有的都成这样了,你tableView:cellForRowAtIndexPath:每次使用进行转换,而不是你必须显示您的字符串:

for (int i = 0 ; i != myContentsArray.count ; i++) { 
    NSString *msgDesc = [myContentsArray objectAtIndex:i]; 
    char const *cStr = [msgDesc cStringUsingEncoding:NSISOLatin1StringEncoding]; 
    [myContentsArrayConverted addObject:[NSString stringWithCString: cStr encoding:NSUTF8StringEncoding]]; 
} 

现在你可以用替换,慢速代码快得多

NSString *msgDesc = [myContentsArrayConverted objectAtIndex:indexPath.row]; 
+0

好吧,我想过这样做,但从来没有尝试过,但是,我在heightForRowAtIndexPath中做了并试图在我的实际JSON中替换该特定行中的格式化字符串。因此,下一次每当我从数组中取数时,它会给我一个格式。有没有其他的方式来显示不同的语言字符?除了分配一个nsstring并将cstring传递给它。 – 2013-03-05 21:24:07

+0

@RenoJones那么,另一种选择是[通过'NSData'](http://stackoverflow.com/a/8314908/335858),但我怀疑它会给你一个很大的改进。当你计算高度时,你是否反复调用'sizeWithFont:'方法?如果你这样做,你可能需要缓存它返回的数字,因为如果我没有记错的话,调用也不是太快。 – dasblinkenlight 2013-03-05 21:30:51

+0

是的,我正在缓存json数组本身的高度,并尽我所能重用这些东西。我相信NSdata + NSString方法类似于NSString + CString .. – 2013-03-05 21:35:45