一. 是%ld和NSInteger之间的隐患
平常我们写 NSInteger 比如 :
NSInteger index =3
NSString *str=[NSString stringWithFormat:@"%ld", index]; 这样写是有隐患的
NSInteger index =3
NSString *str=[NSString stringWithFormat:@"%ld",@(index)];
是将括号里的转换成字符串,这样就直接可以使用% @ 了 至于隐患,那就涉及到跟处理器的位数有关了,在32位,64位,128位处理器上,%ld所代表的数字的范围不同 64位所代表的范围是2的64次方,128位处理器是2的128次方,如果数字是2的70次方,你在128位上使用了%ld,显示是正数,在64位上就会超出范围,这样就会显示成负数
二.SLComposeViewController
在做FaceBook和Twitter分享的时候,用 SLComposeViewController 分享
当 系统设置里面 没有登录 相关FaceBook 和Twitte相关账户时程序闪退,下面判断并不能解决闪退问题
if([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook])
出现闪退的情况,我测试发现SLComposeViewController * slComposerSheet,slComposerSheet为nil; 结果:如果slComposerSheet为nil则走到[self presentViewController: slComposerSheet animated:YES completion:nil];这就会crash程序就会崩掉。 解决方法:在弹出presentViewController 之前 判断SLComposeViewController是否存在
if([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook])
{
SLComposeViewController * slComposerSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
[slComposerSheet setInitialText:self.detail.getTitle];
[slComposerSheet addImage:[[APDNewsManager sharedManager] getNewsImage:[self.detail getImageUrl]]];
[slComposerSheet addURL:[NSURL URLWithString:[self mutableShareUrl]]];
if (slComposerSheet) {
[self presentViewController:slComposerSheet animated:YES completion:nil];
}else{
//不存在slComposerSheet
}
}
后来发现 有人早已指出问题 参考连接
三.在tableView代理外 拿到tableView 对应的数据
我们在tableView里面 拿数据 一般都是在tableView 代理里这么取
MenuModel *model=[self.dataArray objectAtIndex:indexPath.row];
NSLog(@"%@",model)
如果不在tableView代理里 怎么取呢,用下面方法,前提 要tableView已经有数据的情况下
MenuModel *model=self.dataArray[[[self.tableView indexPathForSelectedRow] row]];
NSLog(@"%@",model)
四. integerValue
在不少代码中 会有integerValue的使用比如下面这样
//timeInterval 是服务器传来的字符串
NSTimeInterval seconds = [timeInterval integerValue];
NSDate *date = [NSDate dateWithTimeIntervalSince1970:seconds/1000];
这个代码看时没问题 在iPhone5以上的机器 运行时没问题 ,但iPhone5以下就出现 不准确了 。因为iPhone5以下因为32位机器上毫秒级的时间戳integerValue后越界,导致后续转换都异常 。我们可以用doubleValue 来代替使用 就没有问题了
五.APP国际化 默认APP名字的问题
APP 在不支持国际化的语言下 APP名字值显示中文 "中文" 而不是 "English" 。比如:APP不支持韩语,在手机系统是韩语的情况下 安装应用 会显示中文"中文" 。
解决: 进系统设置-》通用-》语言与地区,看到首选语言项,如果英文在前就显示英文,中文在前就显示中文。如果所支持的国际化都没有就显示localiztion native development region 设置的地区语言,只能说苹果把简单问题复杂化了