IOS開發問題索引(七)

全系列文章索引:

IOS開發問題索引(一)

IOS開發問題索引(二)

IOS開發問題索引(三)

IOS開發問題索引(四)

IOS開發問題索引(五)

IOS開發問題索引(六)

IOS開發問題索引(七)

IOS開發問題索引(八)

IOS開發問題索引(九)


1 【編譯】xcode突然編譯不通過,報錯不支持64位

    此種場景出現在將project中32位第三方庫替換成64位時,project中如何存在相同的第三方庫,最好把原來32位相同的庫刪除,再添加。不然Xcode編譯時,有可能索引到重複的那個32位庫。造成編譯通不過。


2 【UI】設置UIButton的文字顯示位置、字體的大小、字體的顏色

http://blog.csdn.net/chengyingzhilian/article/details/8363855

btn.frame= CGRectMake(x, y, width, height);

[btn setTitle: @"search" forState: UIControlStateNormal];

//設置按鈕上的自體的大小

//[btn setFont: [UIFont systemFontSize: 14.0]];    //這種可以用來設置字體的大小,但是可能會在將來的SDK版本中去除改方法

//應該使用

btn.titleLabel.font = [UIFont systemFontOfSize: 14.0];

[btn seBackgroundColor: [UIColor blueColor]];

//最後將按鈕加入到指定視圖superView

[superViewaddSubview: btn];

==========================================================

tvnamelabel = [[UIButtonalloc]initWithFrame:CGRectMake(5,5,200,40)];

這樣初始化的button,文字默認顏色是白色的,所有如果背景也是白色的話,是看不到文字的,

btn.contentHorizontalAlignment=UIControlContentHorizontalAlignmentLeft;//設置文字位置,現設爲居左,默認的是居中

[btn setTitle:@「title」forState:UIControlStateNormal];// 添加文字

有些時候我們想讓UIButton的title居左對齊,我們設置

btn.textLabel.textAlignment= UITextAlignmentLeft

是沒有作用的,我們需要設置

btn.contentHorizontalAlignment = UIControlContentHorizonAlignmentLeft;

但是問題又出來,此時文字會緊貼到做邊框,我們可以設置

btn.contentEdgeInsets = UIEdgeInsetsMake(0,10, 0, 0);

使文字距離做邊框保持10個像素的距離。

=======================================================

設置UIButton上字體的顏色設置UIButton上字體的顏色,不是用:

[btn.titleLabelsetTextColor:[UIColorblackColor]];

btn.titleLabel.textColor=[UIColorredColor];

而是用:

[btn setTitleColor:[UIColor blackColor]forState:UIControlStateNormal];


3 【UI】indicatorView不顯示菊花

    indicatorView必須要在viewWillAppear方法中啓動動畫,而不要在viewDidLoad方法中,不然無法顯示。

[_indicatorView startAnimating]


4 【編譯】Unsupportedcompiler 'com.apple.compilers.llvmgcc42' selected for architecture 'armv7'

Unsupported compiler 'com.apple.compilers.llvmgcc42'selected for architecture 'armv7'

XCode5  編譯出錯的問題:

解決方法:

Change your compiler for

C/C++/ObjectiveC Go to Build Settings->Build OPtions->compiler for

C/C++/ObjectiveC; select Default(Apple LLVM5.0)


5  【UI】UILabel圓角

在ios7下處理方法:

在lblBadgeValue.layer.cornerRadius = 10;後要加一句

[[lblBadgeValue layer]

setMasksToBounds:YES];


6 【UI】IOS helveticaneue字體


7    【UI】UITableView不顯示分隔線

cityTableView.separatorStyle = UITableViewCellSeparatorStyleNone;


8 【UI】UITableViewCell去掉點擊效果

相當於Android中的ListView的selector設置成空/透明的:

1.XIB設置


上圖中的Selection設置成空

2.代碼

UITableViewCell*cell;

......

......

cell.selectionStyle = UITableViewCellSelectionStyleNone;


9 【NSString】使用CFStringTransform將漢字轉換爲拼音

http://blog.csdn.net/meegomeego/article/details/23253939

        iOS在CoreFoundation中提供了CFStringTransform函數,但在Foundation中卻沒有相對應的方法。它的定義如下:

BooleanCFStringTransform(CFMutableStringRef string, CFRange *range, CFStringReftransform, Boolean reverse);

        其中string參數是要轉換的string,比如要轉換的中文,同時它是mutable的,因此也直接作爲最終轉換後的字符串。range是要轉換的範圍,同時輸出轉換後改變的範圍,如果爲NULL,視爲全部轉換。transform可以指定要進行什麼樣的轉換,這裏可以指定多種語言的拼寫轉換。reverse指定該轉換是否必須是可逆向轉換的。如果轉換成功就返回true,否則返回false。

        如果要進行漢字到拼音的轉換,我們只需要將transform設定爲kCFStringTransformMandarinLatin或者kCFStringTransformToLatin(kCFStringTransformToLatin也可適用於非漢字字符串):

CFMutableStringRef string = CFStringCreateMutableCopy(NULL, 0, CFSTR("中國"));

CFStringTransform(string,NULL, kCFStringTransformMandarinLatin, NO);

NSLog(@"%@",string);

這段代碼將輸出:

2013-11-2214:41:14.644 Test[2436:907] zhōng guó

        可以看出,CFStringTransform正確的輸出了「中國」的拼音,而且還帶上了音標。有時候我們不需要音標怎麼辦?還好CFStringTransform同時提供了將音標字母轉換爲普通字母的方法kCFStringTransformStripDiacritics。我們在上面的代碼基礎上再加上這個:

CFStringTransform(string,NULL, kCFStringTransformStripDiacritics, NO);

NSLog(@"%@",string);

那麼最終將輸出:

2013-11-22 14:47:00.380Test[2470:907] zhong guo


示例程序:

+ (NSString*) getPinyinStringWithString:(NSString*) str

{

    CFMutableStringRefstring = CFStringCreateMutableCopy(NULL, 0, (__bridge CFStringRef)str);

    CFStringTransform(string, NULL, kCFStringTransformMandarinLatin, NO);

   CFStringTransform(string, NULL, kCFStringTransformStripDiacritics, NO);

    NSLog(@"%@",string);

    return (__bridge NSString*)(string);

}


10 【NSString】ARC中NSString*與CFStringRef的相互轉換

http://www.tuicool.com/articles/MJRr226

// CFStringRef to NSString*

NSString *yourFriendlyNSString = ( __bridge NSString * ) yourFriendlyCFString ;

// NSString * toCFStringRef

CFStringRef yourFriendlyCFString = ( __bridge CFStringRef ) yourFriendlyNSString ;


11 【文件目錄】iOS Documents、Library和tmp的作用

1.Documents:

        只有用戶生成的文件、其他數據及其他程序不能重新創建的文件,應該保存在/Documents 目錄下面,並將通過iCloud自動備份。

2.Library:

        可以重新下載或者重新生成的數據應該保存在 /Library/Caches 目錄下面。舉個例子,比如雜誌、新聞、地圖應用使用的數據庫緩存文件和可下載內容應該保存到這個文件夾。

3.tmp:

        只是臨時使用的數據應該保存到 /tmp 文件夾。儘管 iCloud 不會備份這些文件,但在應用在使用完這些數據之後要注意隨時刪除,避免佔用用戶設備的空間


        ios開發中,所有的美術、音樂、存儲數據文件都放在resource文件夾下面,要獲取該resource文件夾的路徑,可以使用下面幾個方法。

1.NSString* resourcePath = [[NSBundlemainBundle] resourcePath];//返回的是resource文件夾的路徑,但是在iphone simulator裏運行,在控制檯把resourcePath打印出來的時候,會發現,路徑裏沒有resource這個文件夾。

        原因:mac os是類unix操作系統,它有自己的文件系統,跟windows不一樣。作爲開發者只需要記住把該需要的資源文件都存放到resource文件夾裏就好了。

2.另外一個獲取Xcode中,項目裏的resource文件夾下的資源文件的方法是:

NSString* outputStr = [[NSBundlemainBundle] pathForResource:@"data" ofType:"json"];

        注意:當使用NSString* outputStr =[NSBundle mainBundle] pathForResource:@"data" ofType:"json"inDirectory:@"RefineScene"];

        這個方法時,並不能得到對應目錄下的文件,返回的是個null值,也就是說即使在resource文件夾下新建了個文件夾,XCode也會無視,不過這樣方便開發人員開發。所以使用1中的方法就可以了,得到路徑後再通過appendString或者appendFormat來添加文件名字符串,就得到了resource下面的路徑字符串,然後就可以在resource下面創建一個文件來儲存數據。如:[outputStr appendString:@"/highscore.txt"],或者[outputStrappendFormat:@"/high%d.txt",2];

iOS學習7:iOS沙盒(sandBox)機制(一)之獲取沙盒路徑及目錄說明

http://my.oschina.net/joanfen/blog/151145

IOS中獲取各種文件的目錄路徑的方法

http://blog.csdn.net/zhenzhenzhao12/article/details/8162793


12 【NSUserDefault】NSUserDefaults讀取和寫入自定義對象

http://blog.csdn.net/chyroger/article/details/5785297

NSUserDefaults可以存取一些短小的信息。

比如存入再讀出一個字符串到NSUserDefaults:

NSString *string = [NSString stringWithString @"hahaha"];

NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];

[ud setObject: string forKey:@"myKey"];

NSString *value;

value = [ud objectForKey: "myKey"];

        但是並不是所有的東西都能往裏放的。NSUserDefaults只支持:NSString, NSNumber, NSDate, NSArray, NSDictionary.

        如果把一個自定義的類存到一個NSArray裏,然後再存到NSUserDefaults裏也是不能成功的。不信可以試試,如果你成功的請告訴我。

        那怎麼辦呢?

        我找到的方法是,讓這個自定義類實現協議中的- (id) initWithCoder: (NSCoder *)coder方法和- (void) encodeWithCoder: (NSCoder *)coder方法(obj-c的協議protocol就是java的接口interface,就是C++的純虛函數),然後把該自定義的類對象編碼到NSData中,再從NSUserDefaults中進行讀取。

粘代碼:

假設有這樣一個簡單的類對象

@interface BusinessCard : NSObject {

粘代碼:

假設有這樣一個簡單的類對象

@interface BusinessCard : NSObject {

    NSString *_firstName;

    NSString *_lastName;

}

    @property (nonatomic, retain) NSString *_firstName;

    @property (nonatomic, retain) NSString *_lastName;

@end;


@implementation BusinessCard

@synthesize _firstName, _lastName;

- (void)dealloc{

    [_firstName release];

    [_lastName release];

    [super dealloc];

}

- (id) initWithCoder: (NSCoder *)coder

{

    if(self = [super init])

    {

        self._firstName = [coder decodeObjectForKey:@"_firstName"];

        self._lastName = [coder decodeObjectForKey:@"_lastName"];

    }

    return self;

}

- (void) encodeWithCoder: (NSCoder *)coder

{

    [coder encodeObject:_firstName forKey:@"_firstName"];

    [coder encodeObject:_lastName forKey:@"_lastName"];

}


@end

然後再存取時通過NSData做載體:

相關文章
相關標籤/搜索