iOS 开发百问(3)

2二、解决 messagesent to deallocated instance 0x52cc690 错误app

当试图对某个对象进行赋值操做的时候出现这个错误,如:工具

tfContent.text=bodyText;ui

此时,你能够打开NSZombieEnable选项,则console会有以下输出:spa

***-[CFString _isNaturallyRTL]: message sent to deallocated instance 0x52cc690prototype

说明_isNaturallyRTL消息被发送给了一个已经释放了的对象。从上面的语句看,多是这两个对象:tfContent、bodyText。code

你能够打印tfContent或者bodyText的内存地址,看看究竟是哪一个对象已经被释放掉了:orm

NSLog(@"tfContent:0x%x",(int) tfContent);xml

NSLog(@"bodytext:0x%x",(int) bodyText);对象

结果代表是bodyText被提早释放:ip

tfContent: 0x52cf160

bodytext: 0x52cc690

在适当的地方对bodyText进行retain,问题解决。

2三、 putpkt:write failed: Broken pipe错误

重启设备。

2四、.hfile not found

实际上该.h文件并无被包含进target。选择对应.m文件,点击“ShowUtilities”按钮(在工具条的右端),在Utilities中找到Target Membership,将Target前面的勾去掉,而后再从新勾上。即至关于将该.m文件从新加入target的Buildphase中。

2五、 Xcode 4:如何将for iPhone的xib转变为for iPad

在Xcode 3.x中,将xib从iPhone版转变为iPad版,经过Create iPad Version菜单。

但在Xcode 4.x中,这个菜单找不到了。经过一番摸索,笔者发现能够用以下方法将xib转换为iPad版本。

一、修改xib源文件

xib文件实际上是一个xml文件。在Project Navigator中,在xib文件上右键,选择“Open As -> Source Code”,便可以源代码方式查看xib文件,找到"com.apple.InterfaceBuilder3.CocoaTouch.XIB"一行,将其改成 "com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB",即增长了".iPad"。

按下⌘+F,打开搜索栏,点击Replace菜单,将模式改变替换模式。将xib文件中全部"IBCocoaTouchFramework"用 "IBIPadFramework"替换。

按下⌘+S,保存修改。

二、修改xib的视图尺寸

在xib文件上右键,选择“Open As -> Interface Builder – iOS”,用IB模式打开。

选择xib文件中的根视图(UIView),在属性面板中找到Size选项,将其改成Full iPad Screen。

如今,你能够有一个iPad版本的xib了。

 

2六、icon dimensions (0 x 0) don't meet the size requirements.

打开Project的BuildSettings,找到Compress PNG Files,将值设置为No。

或者:

选中该png文件,在FileInspector面板中,找到File Type,将其由 "PNG" 修改成 "Icon".

2七、警告: noprevious prototype for function

打开Target->BuildSettings,搜索prototype,将Missing Function ProtoTypes改成NO。

2八、CorePlot编译时出现 错误“Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clangfailed with exit code 1”

请将Scheme 从 iOS Device 改成 iPhone 5.0 Simulator。或者将Compiler for C/C++ 改成 LLVM GCC4.2。同时,Core Plot 1.0 再也不支持老的 armv6 CPU。

2九、使用CABasicAnimation改变UIView的alpha值无效

UIView的alpha值,在CALayer中实际上是"opacity",请使用opcity做为keyPath。

30、CorePlost:定制 Axis Label 后,Tick Mark 不显示。

设置Axis 的majorTickLocations 为你想显示 tick mark 的位置。

NSMutableArray*customTickLocations=[[[NSMutableArray alloc]init]autorelease];

for(int i=0;i<10;i++){

[customTickLocationsaddObject:[NSNumber  numberWithInt:i]];

}

xAxis.majorTickLocations=[NSSetsetWithArray:customTickLocations];

 

3一、定制的UITableViewCell, indentationLevel不能生效

须要在定制的UITableViewCell中实现layoutSubviews方法。

 - (void)layoutSubviews

{

    [super layoutSubviews];

    float indentPoints = self.indentationLevel *self.indentationWidth;

    for(UIView *view in self.subviews){

        view.frame = CGRectMake(

                               view.frame.origin.x+indentPoints,

                               view.frame.origin.y,

                               view.frame.size.width,

                               view.frame.size.height

                               );

    }

}

相关文章
相关标签/搜索