最近几天看了一个ios点餐系统的源码,学习了不少东西,对接下来自己要做的2个项目都有启发,在这里总结一下一些对自己比较有用的信息,源码会在文章末尾给出下载链接。
这个程序的主要界面就是一个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;
}
需要拿已存在于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];
UIImage