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

                               );

    }

}

相關文章
相關標籤/搜索