开个帖子不定期更新,记录遇到的ios下的坑和bugs,其中有些已经解了,有些还是无解,有些是apple自己的改进,但是确实坑到我们了
这个到ios7下还无解,ios8未看
UIFont copy 在ios6下crash
这个想不明白为啥,也许是以前的coder用了什么黑魔法
// UIKeyboardDidShowNotification ---> UITextViewTextDidBeginEditingNotification
// UITextFieldTextDidBeginEditingNotification ---> UIKeyboardDidShowNotification
这个也不能算是bug,但是有的时候就是想先执行DidBeginEditing的消息得到引起弹出键盘的sender囧么办呢
下面的代码ios7下面(sdk7.1)superview都是UIDropShadowView,ios8下面(sdk8.0)2是nil
[self presentViewController:vc
animated:NO
completion:^{
UIView *view = vc.view.superview;
NSLog(@"1:%@", view);
}];
UIView *view = vc.view.superview;
NSLog(@"2:%@", view);
一般用这个属性是修改呈现的view的size, 在sdk7以后可以用preferredContentSize
ios7在转屏的时候window是不会转动的,ios8转动
这就导致一些依赖UIWindows的控件就悲剧了
在 ios8 中网页里用window.location= “xxx://yyy”可以调起注册了xxx的app,但是在ios8下面,结尾带’=’的url是不能调起app的.
解决方法
var iThunderFrame;
iThunderFrame = document.createElement("iframe");
iThunderFrame.setAttribute("src", sDownloadURL);
iThunderFrame.setAttribute("style", "display:none;");
iThunderFrame.setAttribute("height", "0px");
iThunderFrame.setAttribute("width", "0px");
iThunderFrame.setAttribute("frameborder", "0");
document.body.appendChild(iThunderFrame);
iThunderFrame.parentNode.removeChild(iThunderFrame);
同样的NSString的UTF8String地址一样么?
ios6下难讲,ios7,ios8一样.
因此下面这种写法是不可取的,
- (void)setCategoryProperty:(NSString*)key value:(id)obj
{
[self willChangeValueForKey:key];
objc_setAssociatedObject(self, [key UTF8String], obj, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
[self didChangeValueForKey:key];
}
- (id)getCategoryProperty:(NSString*)key
{
return objc_getAssociatedObject(self, [key UTF8String]);
}
但是我们又非要想这样写囧么办呢
// 先NSString取值,再取址.
- (void)setCategoryProperty:(NSString*)key value:(id)obj
{
[self willChangeValueForKey:key];
objc_setAssociatedObject(self, (__bridge const void *)(&(*key)), obj, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
[self didChangeValueForKey:key];
}
- (id)getCategoryProperty:(NSString*)key
{
return objc_getAssociatedObject(self, (__bridge const void *)(&(*key)));
}