不得不说 XCode是我用过的最好的IDE了,代码自动补全、debug、真机调试都非常方便,可是就是因为功能很强大了,有一些细节上很容易出错。记录一下最近几天编程中遇到的小问题:
1. 在写第14章flowerColorTable程序时,发现程序完成之后,每次点击一个条目是不会有反应的,而点击其他条目的时候,弹出的对话框里的内容是上次点击的条目内容,后来经过好一番找,才找到问题所在。
原本的响应单元格选择事件的函数是这样的:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ UIAlertView* showSelection; NSString* flowerMessage; switch (indexPath.section) { case kRedSection: flowerMessage = [[NSString alloc] initWithFormat:@"You Chose the red flower - %@", _redFlowers[indexPath.row]]; break; case kBlueSection: flowerMessage = [[NSString alloc] initWithFormat:@"You Chose the blue flower - %@", _blueFlowers [indexPath.row]]; break; default: flowerMessage = [[NSString alloc] initWithFormat:@"I have no idea what you chose"]; break; } showSelection = [[UIAlertView alloc] initWithTitle:@"Flower Selected" message:flowerMessage delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [showSelection show]; }
但是因为XCode强大的自动补全功能,我直接默认的函数写成了didDeSelectRowAtIndexPath,虽然就差2个字母,但是想必函数的意义也可以轻易地从字面上区别出来了。
2. 设置一个背景按钮,当用户点击键盘以外的区域是能够自动隐藏键盘。
这个小技巧在第7章的时候就体会过了,意思是在用户输入框中需要输入内容的时候,会弹出来键盘,用户输入完成之后,点击键盘上的Done或者点击键盘以外的区域都可以完成隐藏键盘的功能。这个功能的技巧是设置一个最下方的充满整个屏幕的button,然后把button的点击事件和退出键盘绑定在一起。
但是需要注意的是,一定要把键盘的模式设定成为Cutom,这样它就会看不到,而不是把它隐藏了。同时如何把这个button放置到最底层呢?其实就是在大纲区域,把这个按钮拖到最上部就行了,从上到下,控件一次是从后到前排列的。
3. 关于
NSDocumentDirectory和NSDocumentationDirectory
- (IBAction)storeSurvey:(id)sender { NSString* csvLine = [NSString stringWithFormat:@"%@,%@,%@\n", self.firstName.text, self.lastName.text, self.emai.text]; NSString* docDir = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; NSString* surveyFile = [docDir stringByAppendingPathComponent:@"surveyresults.csv"]; if (![[NSFileManager defaultManager] fileExistsAtPath:surveyFile]) { [[NSFileManager defaultManager] createFileAtPath:surveyFile contents:nil attributes:nil]; } NSFileHandle* fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:surveyFile]; [fileHandle seekToEndOfFile]; [fileHandle writeData:[csvLine dataUsingEncoding:NSUTF8StringEncoding]]; [fileHandle closeFile]; self.firstName.text = @""; self.lastName.text = @""; self.emai.text = @""; }这段代码是把内容存储到程序的文件下面的document目录里面,但是刚开始的时候,我写成了 NSDocumentationDirectory这个函数,结果在想要输出文件中内容的时候每次都找不到文件。后来google了一下这两个函数的区别:
NSDocumentDirectory才是documents的路径,NSDocumentationDirectory是Documentation的路径。两者是不一样的。