ios 点餐系统
这个程序的主要界面就是一个TabBarController。总共三个标签,第一个是所有的可点的菜,第二个是已点的菜,第三个是可以留言或者查看所有留言。
下面是第一个页面:
右上角的i按钮是添加新菜,每个cell中的order就是点餐咯,可以重复按多次。
首先说下这个列表的数据是存放在coredata中的,这个项目的coredata有两个实体,一个是dishes保存每一道菜的名字,id,价格,描述,菜系等。还有一个实体是type保存菜系。
这个项目用coredata的方式,正好是我想学的。
就是在新建项目的时候勾选use coredata,那么在appdelegate中就会出现与coredata响应的代码了,只需要根据自己的需要稍微修改即可。或者是自己在已有的项目中添加一个coredata文件,然后将一个已经勾选了use coredata的项目中的appdelagate中的一些代码复制过来即可。
那么在各个文件中我需要用到coredata的时候 要怎么操作呢?看下面的代码:
- HotelAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
- //connection
- NSManagedObjectContext *context = [appDelegate managedObjectContext];
- //table
- NSEntityDescription *entityDescr =[NSEntityDescription entityForName:@"Dishes" inManagedObjectContext:context];
- //query
- NSFetchRequest *request = [[NSFetchRequest alloc] init];
- [request setEntity:entityDescr];
- //pred
- //NSPredicate *pred = [NSPredicate predicateWithString:@"id=1"];
- NSSortDescriptor *nameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"typeid" ascending:YES];
- NSArray *arraySortDescriptor = [[NSArray alloc] initWithObjects:nameDescriptor, nil];
- [request setSortDescriptors:arraySortDescriptor];
- [arraySortDescriptor release];
- NSError *error;
- // NSManagedObject *aDish = nil;
- // NSNumber *id = [NSNumber numberWithInt:1];
- NSArray *objects = [context executeFetchRequest:request error:&error];
- if(objects != nil){
- self.list = objects;
- }
HotelAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
//connection
NSManagedObjectContext *context = [appDelegate managedObjectContext];
//table
NSEntityDescription *entityDescr =[NSEntityDescription entityForName:@"Dishes" inManagedObjectContext:context];
//query
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescr];
//pred
//NSPredicate *pred = [NSPredicate predicateWithString:@"id=1"]; NSSortDescriptor *nameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"typeid" ascending:YES];
NSArray *arraySortDescriptor = [[NSArray alloc] initWithObjects:nameDescriptor, nil];
[request setSortDescriptors:arraySortDescriptor];
[arraySortDescriptor release]; NSError *error;
// NSManagedObject *aDish = nil;
// NSNumber *id = [NSNumber numberWithInt:1];
NSArray *objects = [context executeFetchRequest:request error:&error]; if(objects != nil){
self.list = objects;
}
需要拿已存在于coredata中的文件的时候,就用上面的步骤就可以咯 拿到的数据就在最后的self.list中了
可以看到上面的tableView是自己绘制的,先看下面代码:
- - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
- NSUInteger row = [indexPath row];
- NSManagedObject *theObj = [self.list objectAtIndex:row];
- NSNumber *id = [theObj valueForKey:@"id"];
- NSInteger typeid = [[theObj valueForKey:@"typeid"] intValue];
- NSLog(@"tpyeid:%d",typeid);
- static NSString *CellIdentifier = @"Cell";
- UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
- if (cell == nil) {
- cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
- UIColor *elemBgColor = [UIColor clearColor];
- UIImageView *img = [[UIImageView alloc] init];
- img.frame = CGRectMake(kX, kY, kRowHeight -10, kRowHeight -10);
- img.tag = kImage;
- [cell.contentView addSubview:img];
- [img release];
- UILabel *nameLbl = [[UILabel alloc] initWithFrame:CGRectMake(65, 0, 100, 25)];
- nameLbl.font = [UIFont systemFontOfSize:14];
- nameLbl.tag = kName;
- nameLbl.backgroundColor = elemBgColor;
- [cell.contentView addSubview:nameLbl];
- [nameLbl release];
- UILabel *typeLbl = [[UILabel alloc] initWithFrame:CGRectMake(160, 0, 70, 25)];
- typeLbl.font = [UIFont systemFontOfSize:14];
- typeLbl.tag = kType;
- typeLbl.backgroundColor = elemBgColor;
- [cell.contentView addSubview:typeLbl];
- [typeLbl release];
- UILabel *priceLbl = [[UILabel alloc] initWithFrame:CGRectMake(240, 0, 50, 25)];
- priceLbl.font =[UIFont systemFontOfSize:14];
- priceLbl.tag = kPrice;
- priceLbl.backgroundColor = elemBgColor;
- [cell.contentView addSubview:priceLbl];
- [priceLbl release];
- UILabel *introLbl = [[UILabel alloc] initWithFrame:CGRectMake(60, 25, 160, 30)];
- introLbl.tag = kIntro;
- introLbl.backgroundColor = elemBgColor;
- introLbl.numberOfLines = 2;
- introLbl.textColor = [UIColor grayColor];
- introLbl.font = [UIFont systemFontOfSize:12];
- [cell.contentView addSubview:introLbl];
- [introLbl release];
- UILabel *btnBgLbl = [[UILabel alloc] initWithFrame:CGRectMake(230, 25, 60, 30)];
- btnBgLbl.backgroundColor = elemBgColor;
- [cell.contentView addSubview:btnBgLbl];
- [btnBgLbl release];
- UIButton *orderBtn = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
- orderBtn.frame = CGRectMake(230, 32, 60, 20);
- [orderBtn setTitle:@"order" forState:UIControlStateNormal];
- [orderBtn addTarget:self action:@selector(order:) forControlEvents:UIControlEventTouchUpInside];
- [cell.contentView addSubview:orderBtn];
- }
- cell.tag = 1 + [indexPath row];
- TableCellView *cellView = [[TableCellView alloc] init];
- cellView._count = [self.list count];
- cellView._index = [indexPath row];
- cell.backgroundView = cellView;
- [cellView release];
- NSString *imageName = [NSString stringWithFormat:@"%d.jpg",[id intValue]];
- UIImageView *img = (UIImageView *)[cell.contentView viewWithTag:kImage];
- img.image = [UIImage imageNamed:imageName];
- UILabel *nameLbl = (UILabel *)[cell.contentView viewWithTag:kName];
- nameLbl.text = [theObj valueForKey:@"name"];//[list objectAtIndex:[indexPath row]];
- UILabel *typeLbl = (UILabel *)[cell.contentView viewWithTag:kType];
- typeLbl.text = [theObj valueForKey:@"type"];
- UILabel *priceLbl = (UILabel *)[cell.contentView viewWithTag:kPrice];
- NSNumber *nPrice = [theObj valueForKey:@"price"];
- priceLbl.text = [NSString stringWithFormat:@"¥%d",[nPrice intValue]];
- UILabel *introLbl = (UILabel *)[cell.contentView viewWithTag:kIntro];
- NSString *introText = [theObj valueForKey:@"intro"];
- if([introText length] > 70){
- introText = [introText substringToIndex:70];
- introText = [introText stringByAppendingString:@"..."];
- }
- introLbl.text = introText;
- return cell;
- }
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSUInteger row = [indexPath row];
NSManagedObject *theObj = [self.list objectAtIndex:row]; NSNumber *id = [theObj valueForKey:@"id"];
NSInteger typeid = [[theObj valueForKey:@"typeid"] intValue];
NSLog(@"tpyeid:%d",typeid); static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; UIColor *elemBgColor = [UIColor clearColor]; UIImageView *img = [[UIImageView alloc] init];
img.frame = CGRectMake(kX, kY, kRowHeight -10, kRowHeight -10);
img.tag = kImage;
[cell.contentView addSubview:img];
[img release]; UILabel *nameLbl = [[UILabel alloc] initWithFrame:CGRectMake(65, 0, 100, 25)];
nameLbl.font = [UIFont systemFontOfSize:14];
nameLbl.tag = kName;
nameLbl.backgroundColor = elemBgColor;
[cell.contentView addSubview:nameLbl];
[nameLbl release]; UILabel *typeLbl = [[UILabel alloc] initWithFrame:CGRectMake(160, 0, 70, 25)];
typeLbl.font = [UIFont systemFontOfSize:14];
typeLbl.tag = kType;
typeLbl.backgroundColor = elemBgColor;
[cell.contentView addSubview:typeLbl];
[typeLbl release]; UILabel *priceLbl = [[UILabel alloc] initWithFrame:CGRectMake(240, 0, 50, 25)];
priceLbl.font =[UIFont systemFontOfSize:14];
priceLbl.tag = kPrice;
priceLbl.backgroundColor = elemBgColor;
[cell.contentView addSubview:priceLbl];
[priceLbl release]; UILabel *introLbl = [[UILabel alloc] initWithFrame:CGRectMake(60, 25, 160, 30)];
introLbl.tag = kIntro;
introLbl.backgroundColor = elemBgColor;
introLbl.numberOfLines = 2;
introLbl.textColor = [UIColor grayColor];
introLbl.font = [UIFont systemFontOfSize:12];
[cell.contentView addSubview:introLbl];
[introLbl release]; UILabel *btnBgLbl = [[UILabel alloc] initWithFrame:CGRectMake(230, 25, 60, 30)];
btnBgLbl.backgroundColor = elemBgColor;
[cell.contentView addSubview:btnBgLbl];
[btnBgLbl release]; UIButton *orderBtn = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
orderBtn.frame = CGRectMake(230, 32, 60, 20);
[orderBtn setTitle:@"order" forState:UIControlStateNormal];
[orderBtn addTarget:self action:@selector(order:) forControlEvents:UIControlEventTouchUpInside]; [cell.contentView addSubview:orderBtn]; }
cell.tag = 1 + [indexPath row]; TableCellView *cellView = [[TableCellView alloc] init];
cellView._count = [self.list count];
cellView._index = [indexPath row];
cell.backgroundView = cellView;
[cellView release]; NSString *imageName = [NSString stringWithFormat:@"%d.jpg",[id intValue]];
UIImageView *img = (UIImageView *)[cell.contentView viewWithTag:kImage];
img.image = [UIImage imageNamed:imageName]; UILabel *nameLbl = (UILabel *)[cell.contentView viewWithTag:kName];
nameLbl.text = [theObj valueForKey:@"name"];//[list objectAtIndex:[indexPath row]]; UILabel *typeLbl = (UILabel *)[cell.contentView viewWithTag:kType];
typeLbl.text = [theObj valueForKey:@"type"]; UILabel *priceLbl = (UILabel *)[cell.contentView viewWithTag:kPrice];
NSNumber *nPrice = [theObj valueForKey:@"price"];
priceLbl.text = [NSString stringWithFormat:@"¥%d",[nPrice intValue]]; UILabel *introLbl = (UILabel *)[cell.contentView viewWithTag:kIntro];
NSString *introText = [theObj valueForKey:@"intro"];
if([introText length] > 70){
introText = [introText substringToIndex:70];
introText = [introText stringByAppendingString:@"..."];
}
introLbl.text = introText;
return cell;
}
上面的代码中,由于坐着并没有为它的tableViewCell加一个id,所以当第一次创建cell的时候,是空的,需要自己定制,定制的过程就是把各个控件位置要放好,这个我没试过,所以对上面的坐标没什么感觉,这个需要多多尝试才知道。
这里要说的有几个点:(1)、tableViewCell有一个属性是contentView是用来容纳所有在他上面出现的控件的,自己绘制cell的时候,一定要把控件加上这个view上面,然后还有一个backgroundView是所有子view的最后面那个,在contentView上面。
(2)、本例中,cell的背景是自绘的,我不会,所以TableCellView类的代码看不太懂,有兴趣的朋友自己去研究下。
(3)、UIView有个属性tag,还有一个方法是viewWithTag.
tag是一个自己定义的常数,用来标记一个对象。viewWithTag方法呢,就是返回匹配给定的tag的view。
- -(IBAction) add:(id)sender {
- AddController *addC = [[AddController alloc] initWithNibName:@"AddController" bundle:nil];
- [self.navigationController pushViewController:addC animated:YES];
- //self.navigationController.navigationBarHidden = NO;
- [addC release];
- }
-(IBAction) add:(id)sender {
AddController *addC = [[AddController alloc] initWithNibName:@"AddController" bundle:nil];
[self.navigationController pushViewController:addC animated:YES];
//self.navigationController.navigationBarHidden = NO;
[addC release];
}
上面的代码是界面中右上角i按钮的响应方法,可以看到上面这种实现navigation跳转的方法是用push 对应的在返回的时候就用pop。这是在segue出现前的一个实现跳转的方法,现在的话 有了segue,就不用这样做咯。
这个就是按完i按钮后来到的添加新菜系的界面xib文件。
由于我主要是讲我的收获,所以在这个界面我只想讲怎么往coredata中添加新元组咯
- -(IBAction) add:(id)sender {
- if([name.text length]*[price.text length]*[type.text length]*[image.text length]*[intro.text length] == 0){
- UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Attention" message:@"All fields needed!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
- [alert show];
- [alert release];
- }else{
- HotelAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
- //connection
- NSManagedObjectContext *context = [appDelegate managedObjectContext];
- //table
- NSEntityDescription *entityDescr =[NSEntityDescription entityForName:@"Dishes" inManagedObjectContext:context];
- //query
- NSFetchRequest *request = [[NSFetchRequest alloc] init];
- [request setEntity:entityDescr];
- //pred
- //NSPredicate *pred = [NSPredicate predicateWithString:@"id=1"];
- NSError *error;
- NSManagedObject *aDish = nil;
- NSNumber *id = [NSNumber numberWithInt:1];
- NSArray *objects = [context executeFetchRequest:request error:&error];
- if(objects != nil){
- aDish = [objects lastObject];
- id = [aDish valueForKey:@"id"];
- id = [NSNumber numberWithInt:[id intValue]+1];
- }
- aDish = [NSEntityDescription insertNewObjectForEntityForName:@"Dishes" inManagedObjectContext:context];
- [aDish setValue:id forKey:@"id"];
- [aDish setValue:name.text forKey:@"name"];
- [aDish setValue:[NSNumber numberWithInt:[price.text intValue]] forKey:@"price"];
- [aDish setValue:type.text forKey:@"type"];
- [aDish setValue:image.text forKey:@"image"];
- [aDish setValue:intro.text forKey:@"intro"];
- [request release];
- [context save:&error];
- [self clearFields];
- }
- }
-(IBAction) add:(id)sender {
if([name.text length]*[price.text length]*[type.text length]*[image.text length]*[intro.text length] == 0){
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Attention" message:@"All fields needed!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
}else{ HotelAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
//connection
NSManagedObjectContext *context = [appDelegate managedObjectContext];
//table
NSEntityDescription *entityDescr =[NSEntityDescription entityForName:@"Dishes" inManagedObjectContext:context];
//query
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescr];
//pred
//NSPredicate *pred = [NSPredicate predicateWithString:@"id=1"]; NSError *error;
NSManagedObject *aDish = nil;
NSNumber *id = [NSNumber numberWithInt:1];
NSArray *objects = [context executeFetchRequest:request error:&error];
if(objects != nil){
aDish = [objects lastObject];
id = [aDish valueForKey:@"id"];
id = [NSNumber numberWithInt:[id intValue]+1]; } aDish = [NSEntityDescription insertNewObjectForEntityForName:@"Dishes" inManagedObjectContext:context];
[aDish setValue:id forKey:@"id"];
[aDish setValue:name.text forKey:@"name"];
[aDish setValue:[NSNumber numberWithInt:[price.text intValue]] forKey:@"price"];
[aDish setValue:type.text forKey:@"type"];
[aDish setValue:image.text forKey:@"image"];
[aDish setValue:intro.text forKey:@"intro"];
[request release];
[context save:&error];
[self clearFields];
}
}
上面的代码是add按钮的响应方法,看完就知道了咯。
、
这个界面要讲的就是view的动画。这个程序中,左右滑动,可以实现翻页,看上一道菜或下一道菜,这个对我来说很有用。
- - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
- //int count = [touches count];
- //NSLog(@"count=%d",count);
- UITouch *touch = [touches anyObject];
- CGPoint location = [touch locationInView:self.view];
- self.lastLoction = location;
- moveChanged = NO;
- }
- - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{
- }
- - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
- CGPoint location = [[touches anyObject] locationInView:self.view];
- lastLoction = location;
- }
- - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
- UITouch *touch = [touches anyObject];
- CGPoint location = [touch locationInView:self.view];
- if(!moveChanged && fabs(location.x - lastLoction.x) > 60 && fabs(location.y - lastLoction.y) < 25){
- moveChanged = YES;
- [UIView beginAnimations:nil context:imageView];
- [UIView setAnimationDuration:1.0];
- [UIView setAnimationTransition:( location.x - lastLoction.x > 0? UIViewAnimationTransitionCurlUp : UIViewAnimationTransitionCurlDown) forView:self.view cache:YES];
- [UIView setAnimationDelegate:self];
- [UIView setAnimationDidStopSelector:@selector(onAnimationStop:finished:context:)];
- [UIView commitAnimations];
- NSUInteger count = [self.managedObjects count];
- if(location.x - lastLoction.x >0){//right
- if(currentRowIndex < count-1){
- currentRowIndex = currentRowIndex +1;
- }
- }else{//left
- if(currentRowIndex > 0){
- currentRowIndex = currentRowIndex -1;
- }
- }
- self.theObj = [self.managedObjects objectAtIndex:currentRowIndex];
- NSNumber *id = [self.theObj valueForKey:@"id"];
- NSLog(@"%d",[id intValue]);
- NSLog(@"distance:%f",location.x - lastLoction.x);
- self.imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg",[id intValue]]];
- NSMutableString *title = [[NSMutableString alloc] init];
- [title appendString: [theObj valueForKey:@"name"]];
- [title appendString:@" "];
- [title appendString:[theObj valueForKey:@"type"]];
- NSNumber *price = [theObj valueForKey:@"price"];
- [title appendString:[NSString stringWithFormat:@"¥%d",[price intValue]]];
- self.nameLbl.text = title;
- self.introText.text = [theObj valueForKey:@"intro"];
- [title release];
- NSDictionary *theRow = [FileController readRow:currentRowIndex];
- NSUInteger orderCount = 0;
- if(theRow != nil){
- orderCount = [[theRow valueForKey:@"count"] intValue];
- }
- self.countLbl.text = [NSString stringWithFormat:@"%d",orderCount];
- lastLoction = location;
- }
- }
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
//int count = [touches count];
//NSLog(@"count=%d",count);
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:self.view];
self.lastLoction = location;
moveChanged = NO;
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{ }
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
CGPoint location = [[touches anyObject] locationInView:self.view];
lastLoction = location;
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:self.view];
if(!moveChanged && fabs(location.x - lastLoction.x) > 60 && fabs(location.y - lastLoction.y) < 25){
moveChanged = YES;
[UIView beginAnimations:nil context:imageView];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:( location.x - lastLoction.x > 0? UIViewAnimationTransitionCurlUp : UIViewAnimationTransitionCurlDown) forView:self.view cache:YES];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(onAnimationStop:finished:context:)];
[UIView commitAnimations]; NSUInteger count = [self.managedObjects count]; if(location.x - lastLoction.x >0){//right
if(currentRowIndex < count-1){
currentRowIndex = currentRowIndex +1;
}
}else{//left
if(currentRowIndex > 0){
currentRowIndex = currentRowIndex -1;
}
} self.theObj = [self.managedObjects objectAtIndex:currentRowIndex];
NSNumber *id = [self.theObj valueForKey:@"id"];
NSLog(@"%d",[id intValue]);
NSLog(@"distance:%f",location.x - lastLoction.x); self.imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg",[id intValue]]]; NSMutableString *title = [[NSMutableString alloc] init];
[title appendString: [theObj valueForKey:@"name"]];
[title appendString:@" "];
[title appendString:[theObj valueForKey:@"type"]];
NSNumber *price = [theObj valueForKey:@"price"];
[title appendString:[NSString stringWithFormat:@"¥%d",[price intValue]]];
self.nameLbl.text = title;
self.introText.text = [theObj valueForKey:@"intro"];
[title release]; NSDictionary *theRow = [FileController readRow:currentRowIndex];
NSUInteger orderCount = 0;
if(theRow != nil){
orderCount = [[theRow valueForKey:@"count"] intValue];
} self.countLbl.text = [NSString stringWithFormat:@"%d",orderCount]; lastLoction = location;
} }
- [UIView beginAnimations:nil context:imageView];
- [UIView setAnimationDuration:1.0];
- [UIView setAnimationTransition:( location.x - lastLoction.x > 0? UIViewAnimationTransitionCurlUp : UIViewAnimationTransitionCurlDown) forView:self.view cache:YES];
- [UIView setAnimationDelegate:self];
- [UIView setAnimationDidStopSelector:@selector(onAnimationStop:finished:context:)];
- [UIView commitAnimations];
[UIView beginAnimations:nil context:imageView];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:( location.x - lastLoction.x > 0? UIViewAnimationTransitionCurlUp : UIViewAnimationTransitionCurlDown) forView:self.view cache:YES];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(onAnimationStop:finished:context:)];
[UIView commitAnimations];
截取的这几句代码就是一个动画的过程.
第二个标签是读取已经下单的菜,这个没什么好说的 和第一个标签的第一个页面很相似。
第三个界面是一个可以发表建议的界面,用到了segment controller来分两个界面,一个是写的 一个是看全部的历史建议的。
切换segmentController上面的标签时,会响应valueChange方法,可以在里面判断是要显示哪个界面。
POST请求的发送也可以再复习一下:
- NSString *postMsg =[NSString stringWithFormat:@"user=%@&content=%@",self.name.text,self.textView.text];
- NSData *postData = [postMsg dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
- NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]];
- NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://bula.kilu.net/post.php"]];
- [request setHTTPMethod:@"POST"];
- [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
- [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
- [request setHTTPBody:postData];
- [NSURLConnection connectionWithRequest:request delegate:self];
NSString *postMsg =[NSString stringWithFormat:@"user=%@&content=%@",self.name.text,self.textView.text];
NSData *postData = [postMsg dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://bula.kilu.net/post.php"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData]; [NSURLConnection connectionWithRequest:request delegate:self];
好了 我学到的东西是这些,还有一些是我看不懂的 对于自己绘制一些view的方法我还是不会,需要补补。
源码我待会会上传,有兴趣的朋友下载去研究下咯 不错的学习资料。,如果运行的时候说差哪一张图片的什么 就随便放张进去文件夹里面然后按它说的给个名字就行了,不影响代码研究。
上传好了 源码地址:ios点餐系统
ios 点餐系统的更多相关文章
- 非常不错的点餐系统应用ios源码完整版
该源码是一款非常不错的点餐系统应用,应用源码齐全,运行起来非常不错,基本实现了点餐的一些常用的功能,而且界面设计地也很不错,是一个不错的ios应用学习的例子,喜欢的朋友可以下载学习看看,更多ios源码 ...
- 很不错的点餐系统应用ios源代码完整版
该源代码是一款很不错的点餐系统应用,应用源代码齐全,执行起来很不错,基本实现了点餐的一些经常使用的功能,并且界面设计地也很不错,是一个不错的ios应用学习的样例,喜欢的朋友能够下载学习看看,很多其它i ...
- 点餐系统web版功能需求
餐厅到店点餐系统需求分析 (版本v1.0.0) 成文信息 主题词: 需求分析 作 者: 14商软ETC 文档类别: 审 核: 批 准: 文档性 ...
- [课程设计]Scrum 3.8 多鱼点餐系统开发进度(留言反馈系统设计)
Scrum 3.8 多鱼点餐系统开发进度(留言反馈系统设计) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点餐系统 ...
- [课程设计]Scrum 3.7 多鱼点餐系统开发进度(留言板选择方案)
Scrum 3.7 多鱼点餐系统开发进度(留言板选择方案) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点餐系统W ...
- [课程设计]Scrum 3.6 多鱼点餐系统开发进度(用户测试反馈页面构思&留言板设计)
Scrum 3.6 多鱼点餐系统开发进度(用户测试反馈页面构思&留言板设计) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团 ...
- [课程设计]Scrum 3.5 多鱼点餐系统开发进度(修复Bug&美化页面)
Scrum 3.5 多鱼点餐系统开发进度(修复Bug&美化页面) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅 ...
- [课程设计]Scrum 3.4 多鱼点餐系统开发进度(下单详细信息页面&会员信息页面)
Scrum 3.4 多鱼点餐系统开发进度(下单详细信息页面&会员信息页面) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队 ...
- [课程设计]Scrum 3.3 多鱼点餐系统开发进度(下单详细信息页面设计)
Scrum 3.3 多鱼点餐系统开发进度(下单详细信息页面设计) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点 ...
随机推荐
- 3d工具收集
Poser 是Metacreations公司推出的一款三维动物.人体造型和三维人体动画制作的极品软件.用过Poser 2与Poser 3的朋友一定能感受到Poser的人体设计和动画制作是那么的轻松自如 ...
- 搭建Keepalived + Nginx + Tomcat的高可用负载均衡架构
1 概述 初期的互联网企业由于业务量较小,所以一般单机部署,实现单点访问即可满足业务的需求,这也是最简单的部署方式,但是随着业务的不断扩大,系统的访问量逐渐的上升,单机部署的模式已无法承载现有的业务量 ...
- c3p0连接池的简单使用和测试1
- UVA10129:Play on Words(欧拉回路)
Some of the secret doors contain a very interesting word puzzle. The team of archaeologists has to s ...
- python_17(sql)
第1章 MySQL安装 1.1 windows版下载地址 1.2 添加环境变量 1.3 初始化 1.4 启动mysql服务 1.5 链接mysql 1.6 制作mysql的windows服务 1.7 ...
- H5存储
1.localstorage ① 500万字符限制② 一般存储ajax请求返回数据,并且需要设置过期时间③ 具有清理机制,将过期数据清理④ 不存储敏感信息⑤ 不存储SEO依赖数据,至少不能严重依赖⑥ ...
- FXP登录Linux报错
1.用FXP登录Linux报错: [info] subsystem request for sftp failed, subsystem not found.[右] [execute] /usr/li ...
- Vuex.js状态管理共享数据 - day8
VScode文件目录: amount.vue代码如下: <template> <div> <!-- <h3>{{ $store.state.count }}& ...
- 跨平台C++开源代码的两种常用编译方式
作者:朱金灿 来源:http://blog.csdn.net/clever101 跨平台C++开源代码为适应各种编译器的编译,采用了两种方式方面来适配.一种是makefile方式.以著名的空间数据格式 ...
- CString的GetBuffer和ReleaseBuffer
GetBuffer()主要作用是将字符串的缓冲区长度锁定,releaseBuffer则是解除锁定,使得CString对象在以后的代码中继续可以实现长度自适应增长的功能. CString ::GetBu ...