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做载体:

相关文章
相关标签/搜索