黑马程序员技术交流社区
标题: OC直接打印数组,数组元素显示中文的问题 [打印本页]
作者: songxing10000 时间: 2014-10-17 18:50
标题: OC直接打印数组,数组元素显示中文的问题
本帖最后由 songxing10000 于 2014-10-17 18:53 编辑
这里我们假设有一个OC数组,然后里面放了一个Person类对象p1,
然后我们希望通过直接打印数组,得到数组里元素的相关信息。
- Person *p1 = [[Person alloc init];
- NSArray *array1 =@[p1];
- for (id s in array1) {
- NSLog(@"%@",s);
- }
复制代码
如果直接像上面那样写的话,我们会得到类对象的内存地址
(打印一个对象:NSLog(@"%@", stu); 默认情况下打印的时对象的名字和内存地址)
[size=16.3636360168457px]显示这不是我们想要的结果,所以我们会重写Person的description方法
- - (NSString *)description {
- return [NSString stringWithFormat:@"我是一个人"];
- }
复制代码然后我们再次执行程序,你会发现程序一样没有得到我们想要的结果,出现乱码非中文了。
- "\U6211\U662f\U4e00\U4e2a\U4eba"
复制代码上面的东西貌似是文字的unicode编码。
等,我们先再回顾一下思路,虽然这很简单。
打印数组,用NSLog%@",是不是也应该重写description方法?
我刚测试了,其实不用除非数组元素的description方法里含有中文。
但是,有时候又必须要有中文呢,那我们就重写description方法吧。
由于NSArray是一个系统的类,又没有在工程中有这个类的文件,所以我想到了用分类,好像也可以直接写在main函数中,那我们先写在分类里吧。
于是我尝试这样写
- - (NSString *)description {
- id s;
- for (s in self) {
- [NSString stringWithFormat:@"%@", s];
- NSLog(@"%@",s);
- }
- return s;
- }
复制代码结果还是不行。
原来这种情况下我们要重写的是descriptionWithLocale:方法
- - (NSString *)descriptionWithLocale:(id)locale
- {
- NSMutableString *strM = [NSMutableString string];
- [strM appendString:@"(\n"];
-
- for (id obj in self) {
- [strM appendFormat:@"\t%@,\n", obj];
- }
- [strM appendString:@")"];
- return strM;
- }
复制代码
作者: muzipiao 时间: 2016-3-26 20:59
原来如此。。。还要重写父类方法
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |