1、noNOYESyes,nil;NSPredicate* predicate=NSPredicate predicateWithFormat:SELF IN0,noNO;NSArray* result=arr filteredArrayUsingPredicate:predicate;,result);for (NSString* s in arr)%:%d,s,predicate evaluateWithObject:s);5. From NSString to NSDataNSString *text = Some string;NSData *data = text dataUsingEn
2、coding:NSUTF8StringEncoding;6. From NSData to NSStringNSString *text = NSString alloc initWithData:data encoding:7.日期和时间NSCalendar *gregorian=NSCalendar alloc initWithCalendarIdentifier:NSGregorianCalendar;NSDateComponents* todayComponents=gregorian components:(NSDayCalendarUnit|NSMonthCalendarUnit|
3、NSYearCalendarUnit) yourDate;NSInteger theDay =todayComponents day;NSInteger theMonth =todayComponents month;NSInteger theYear =todayComponents year;/ now build a NSDate object for yourDate using these components NSDateComponents *components =NSDateComponents alloc init;components setDay:theDay;comp
4、onents setMonth:theMonth;components setYear:theYear;NSDate *thisDate =gregorian dateFromComponents:components;components release;/ now build a NSDate object for the next day NSDateComponents *offsetComponents =NSDateComponents alloc init;offsetComponents setDay:1;NSDate *nextDate =gregorian dateByAd
5、dingComponents:offsetComponents toDate: yourDate options:0;offsetComponents release;gregorian release;8.使用performSelectorInBackground(多线程)调用的方法,必须在该方法中用NSAutoreleasePool否则出现错误:no pool in place - just leaking。如果用performSelector则没有这个问题。9.ld: symbol(s) not found 错误的解决办法展开Targets-Compile Sources,查看列出的所有
6、.m文件,找出其中缺失的.m文件,拖到其中。10.Ojbect C让线程休眠NSThread sleepForTimeInterval:2;/单位是秒11.nil和NULL的区别在Object C中,NULL和nil都是空指针,不同的是,NULL用于c 指针,即(void *);而nil用于c+或java对象,即id为空12.字符串替换str=str stringByReplacingOccurrencesOfString: withString:13.assign,copy,retain之间的区别 assign: 简单赋值,不更改索引计数(Reference Counting)。 copy:
7、 建立一个索引计数为1的对象,然后释放旧对象 retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1retain的实际语法为:- (void)setName:(NSString *)newName if (name != newName) name release;name = newName retain;/ names retain count has been bumped up by 1说了那么麻烦,其实接下来的话最重要:?如果你不懂怎么使用他们,那么就这样 - 使用assign: 对基础数据类型 (NSInteger,CGFloat)和C数据类型(int,
8、 float, double, char, 等等) 使用copy: 对NSString 使用retain: 对其他NSObject和其子类14.nonatomic关键字:atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。15.发送短信邮件打电话+ (void)alert:(NSString *)msgUIAlertView *alertView = UIAlertView alloc initWi
9、thTitle:msg message: delegate:self cancelButtonTitle:OK otherButtonTitles:nil, nil autorelease;alertView showWithBackground;+ (NSString*) cleanPhoneNumber:(NSString*)phoneNumberNSString* number = NSString stringWithString:phoneNumber;NSString* number1 = number stringByReplacingOccurrencesOfString: /
10、 stringByReplacingOccurrencesOfString:-stringByReplacingOccurrencesOfString:( )return number1;+ (void) makeCall:(NSString *)phoneNumberif (DeviceDetection isIPodTouch)UIUtils alert:kCallNotSupportOnIPod;return;NSString* numberAfterClear = UIUtils cleanPhoneNumber:NSURL *phoneNumberURL = NSURL URLWit
11、hString:NSString stringWithFormat:tel:, numberAfterClear;make call, URL=%, phoneNumberURL);UIApplication sharedApplication openURL:phoneNumberURL;+ (void) sendSms:kSmsNotSupportOnIPod;sms:send sms, URL=%+ (void) sendEmail:mailto:, phoneNumber;(NSString *)to cc:(NSString*)cc subject:(NSString*)subjec
12、t body:(NSString*)bodyNSString* str = NSString stringWithFormat:%?cc=%&subject=%&body=%,to, cc, subject, body;str = str stringByAddingPercentEscapesUsingEncoding:NSURL URLWithString:str;16.将NSString转换编码集为gb2312NSURL *url=NSURL URLWithString:urlStr;NSData *data=NSData dataWithContentsOfURL:url; NSStr
13、ingEncoding enc =CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000); NSString *retStr =NSString allocinitWithData:enc;17.将指定格式的字符串转换为日期类型/把yyyyMMddHHmmss格式的字符串转换为NSDate类型-(NSDate*)stringToDate:(NSString*)dateStringNSDateFormatter *dateFormatter = NSDateFormatter alloc init;dat
14、eFormatter setDateFormat:yyyyMMddHHmmssNSDate *date = dateFormatter dateFromString:dateString;dateFormatter release;return date;18.Array was mutated while being enumerated问题的解决在操作数组对象时进行同步,如:synchronized(enemiesArray) 数组操作代码19、字符串与数组之间的转换:SString *string=one:two:three:four NSArray *result=string com
15、ponentsSeparatedByString: string=result componentsJoinedByString:_ 20、定时器NSTimer/1秒后,触发定时器事件NSTimer *timer = NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:selector(timerFired) userInfo:nil repeats:NO;21、让UITextField里面的text垂直居中可以这样写:text.contentVerticalAlignment = UIControlContentVe
16、rticalAlignmentCenter;22、在UITextField最右侧加图片是以下代码, UIImageView *imgv=UIImageView alloc initWithImage:UIImage imageNamed:right.png; text.rightView=imgv; text.rightViewMode = UITextFieldViewModeAlways;如果是在最左侧加图片就换成:text.leftView=imgv;text.leftViewMode = UITextFieldViewModeAlways;23、NSLog 的格式化字符串% 对象% 百
17、分号%d, %i 整数%u 无符整形%f 浮点/双字%x, %X 二进制整数%o 八进制整数%zu size_t%p 指针%e 浮点/双字 (科学计算)%g 浮点/双字 %s C 字符串%.*s Pascal字符串%c 字符%C unichar%lld 64位长整数(long long)%llu 无符64位长整数%Lf 64位双字24、直接链接到itunesNSURL *url = NSURL URLWithString:itms-apps:/ UIApplication sharedApplication openURL:直接链接到safari网页25、获取Bundle的版本号NSStrin
18、g* localVersion= NSBundle mainBundle infoDictionary objectForKey:CFBundleVersion26、stray 357 in program错把写成中文的方括号了。27、provisioning profile xxx cant be found如果你更新了profile,再编译iphone项目,发现下面的错误,那你无论如何clean也不会成功,那真是让人恼火阿这时候,先copy上面那行出错信息中的profile identifier,比如:86C90BA7-77B6-4A75-9EAD-A1FD88C17F6D然后关闭这个项目
19、,打开finder到你的项目文件xxxx.xcodeproj上面按鼠标右键,选择Show Package Contents菜单。在新打开的finder的,找到project.pbxproj,使用一个文本edit打开它,用查找功能找到所有的有那行编码的位置,删除那一行:PROVISIONING_PROFILEsdk=iphoneos* = 86C90BA7-77B6-4A75-9EAD-A1FD88C17F6D删除以后,保存这个 project.pbxproj 文件,用xcode重新打开你的项目,再编译一下试试 28、获取设备类型及当前方向if (UI_USER_INTERFACE_IDIOM(
20、) = UIUserInterfaceIdiomPad)/ 如果设备为iPad /获取设备当前方向,及时进行旋屏 UIInterfaceOrientation orientation=UIDevice currentDevice orientation; self willAnimateRotationToInterfaceOrientation:orientation duration: 29、打印UIView的subviews- (void)explode:(id)aView level:(int)aLevel for (int i = 0; i aLevel; i+) printf();
21、%s:%sn,aView class description UTF8String,aView superclass description UTF8String); for(UIView *subview in aView subviews) self explode:subview level:(aLevel + 1);使用:self explode:textview level:30、旋屏后20像素bug的解决没有优雅的解决方案,只有在view显示后,手动调整:mainView.frame=CGRectMake(0, 0 - 20, self.view.frame.size.width,
22、 self.view.frame.size.height + 20);31、安装Xcode3.2后安装Xcode4.2出现错误:error: unable to create /Users/km-cn/Library/Developer/Xcode/DerivedData/MOA-dwztpffnaapnqfevxsfxemqawqdi/Build/Intermediates (Permission denied)使用chmod命令:sudo chmod -R 777 /Users/km-cn/Library/Developer/32、UIKeyboardBoundsUserInfoKey i
23、s deprecated警告将:NSValue* aValue = info objectForKey:UIKeyboardBoundsUserInfoKey;修改为:UIKeyboardBoundsUserInfoKey32、退出程序 exit(EXIT_SUCCESS); abort();这个是undocument的,随时可能不可用。33、 is deprecated 简单地用NSValue *value = info objectForKey:替换掉:34、缩放网页内容以适应UIWebView NSString *jsCommand = NSString stringWithFormat
24、:document.body.style.zoom = 0.40; webView stringByEvaluatingJavaScriptFromString:jsCommand;或者webView.scalesPageToFit = YES;两个方法只能选择其中之一,前者不支持多点触摸缩放,后者支持但它的自适应缩放不是很好,看起来页面总是要比屏幕真实尺寸要小一点,解决办法是,在html页面中加入:。35、使TextField被编辑时,键盘不弹出设置Text Field的delegate,同时实现UITextFieldDelegate中的textFieldDidBeginEditing方法,并在其中加入textField resignFirstResponder 。如果是Text View,要实现UITextViewDelegate中的textViewDidBeginEditing方法。36、定义常量声明
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1