《iPhone+笔记.doc》由会员分享,可在线阅读,更多相关《iPhone+笔记.doc(6页珍藏版)》请在三一办公上搜索。
1、# interface Event : NSManagedObject property (nonatomic, retain) NSDate *creationDate; property (nonatomic, retain) NSNumber *latitude; property (nonatomic, retain) NSNumber *longitude; end #import Event.h implementation Event dynamic creationDate; dynamic latitude; dynamic longitude; end 从上面我们能看出来,
2、一个实体Event也就会被生成一个NSManagedObject(被管理对象),然后任何accessor和getter 都是被动态生成的,我们其实完全不用操任何的心,只需要在xcdatamodel文件里面配置后,点击添加文件,添加NSManagedObject文件,就会看到自动感知的类对象,然后生成就可以了。 下面是根视图控制器,是一个列表视图(UITableViewController) #import interface RootViewController : UITableViewController /看到是UITableViewController的子类,由于需要使用Core Lo
3、cation, /所以在后面履行其protocal NSMutableArray *eventsArray; NSManagedObjectContext *managedObjectContext; /这个被管理对象内容器就是我们真正对Core Data数据的操作对象 CLLocationManager *locationManager; /用来得到地理位置的Core Location对象 UIBarButtonItem *addButton; /右上角的添加键 property (nonatomic, retain) NSMutableArray *eventsArray; propert
4、y (nonatomic, retain) . CoreData 实例分析学习(1)补 CoreData实例分析学习(1) 补一下“实体”的概念,实体也就是Entity,在打开xcdatamodel文件的时候,我们可以看到 在这里,这个实体叫“Event”,而实体的参数有“创建日期”,“纬度”,“经度”。也就是说,其实这个实体被使用后,我们可以这样理解,实体就是表名,而参数就是列名,然后整个实体就是一张表。当这个Model描述多个实体的关系的时候,就像是一个关系型数据库一样,虽然苹果说“不是!” CoreData 实例分析学习(1) Core Data是个好东西,在数据储存操作上速度快,容易操
5、作,是一种类似关系数据库的东西。但是有些不那么好学,那到底Core Data是怎么操作的呢?怎么用呢?怎么来编程呢?我们一起来学习吧,接下来使用苹果提供的实例程序Locations来作分析: 程序介绍: 右侧是改程序的截图,基本上来说就是通过使用Core Location来得到当时的位置,然后在点击“+”的时候记录下当时的经纬度。通过UITableViewController的功能来添加,编辑,删除等功能。整体程序使用Core Data来储存数据,实体(Entity)为一个位置,包括以下参数:1,时间(收集数据的时间)2,纬度,3,经度 首先我们看看该程序的AppDelegate.h inte
6、rface LocationsAppDelegate : NSObject UIWindow *window; UINavigationController *navigationController; /导航栏 /以下定义了Core Data的三个决定性组建,等后面m文件里面再多介绍 NSPersistentStoreCoordinator *persistentStoreCoordinator; NSManagedObjectModel *managedObjectModel; NSManagedObjectContext *managedObjectContext; property (
7、nonatomic, retain) IBOutlet UIWindow *window; property (nonatomic, retain) UINavigationController *navigationController; - (IBAction)saveAction:sender; /这个没找到作用根本就没用到IB /还记得吧,nonatomic是因为这个程序是单线程 property (nonatomic, retain, readonly) . 得到用户的首选语言 NSUserDefaults* defs = NSUserDefaults standardUserDef
8、autls; /得到用户缺省值 NSArray* languages = defs objectForKey:AppleLanguages; /在缺省值中找到AppleLanguages, 返回值是一个数组 NSString* preferredLang = languages objectAtIndex:0; /在得到的数组中的第一个项就是用户的首选语言了 简单 iPhone视频播放器(1)补 在使用MP库之前是需要将其导入的,上次忘记了,这回将截图发上来 首先在左侧找到Targets 然后打开,双击这个工程名 你就可以看到下面的图了 点击左下角的+号 找到MediaPlayer.frame
9、work 然后点Add,完成! 之后就只需要在需要使用库的地方添加下面的代码拉 #import MediaPlayer/MediaPlayer.h 简单 iPhone视频播放器(1) 本程序源代码,不包含视频文件 视频播放在iPhone中是再重要不过了,今天要在30行内解决iPhone视频播放的问题! 1,建立工程MPtest1 2, 建立一个UIViewController类 MyMPViewController 3, 设置MPtest1AppDelegate初始化并添加MyMPViewController的view到window interface MPtest1AppDelegate :
10、 NSObject UIWindow *window; MyMPViewController *mpViewController; end - (void)applicationDidFinishLaunching:(UIApplication *)application mpViewController = MyMPViewController alloc init; window addSubview:mpViewController.view; window makeKeyAndVisible; 4, 设置MyMPViewController在一个按钮点击后播放视频 interface
11、MyMPViewController : UIViewController UIButton *playButton; end interface MyMPViewController() - (void)playVideo; end implementation MyMPViewController - (id)init if (self = super init) playButton = UIButton buttonWithType:UIButtonTypeRoundedRect retain; /在这里初始化那个按键 playButton.frame = CGRectMake(100
12、, 100, 100, 30); self.view addSubview:playButton; return self; - (void)viewDidLoad . retain 和copy的区别 原来简单解释过属性定义(Property) ,并且提起了简单的retain,copy,assign的区别。那究竟是有什么区别呢? assign就不用说了,因为基本上是为简单数据类型准备的,而不是NS对象们。 Retain vs. Copy! copy: 建立一个索引计数为1的对象,然后释放旧对象 retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 那上面的是什么该
13、死的意思呢? Copy其实是建立了一个相同的对象,而retain不是: 比如一个NSString对象,地址为01111,内容为”STR” Copy到另外一个NSString之后,地址为02222,内容相同,新的对象retain为1,旧有对象没有变化 retain到另外一个NSString之后,地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1 也就是说,retain是指针拷贝,copy是内容拷贝。哇,比想象的简单多了 在 iPhone上显示LCD效果 我看到一个程序是这样样子的: 哇!好厉害,怎么弄出来的!难道要用Q2D画出来么? 不 其实这就是UILabel外加一
14、个奇异的字体 DBLCDTempBlack And, thats it! 生活多么美好阿 不要对 viewController作这样的事情 错误: UIViewController *aViewController = UIViewController alloc init; window addSubview:aViewController.view; aViewController release; 这样的话,系统会崩溃的 window或着其他父视图是不会retain整个viewController的,这个时候不能立刻release 正确: aViewController.view rem
15、oveFromSuperview; aViewController release; 也就是说,在release之前需要从superview中移除这个viewController的view。如果一直都需要这个view,那就在 dealloc里面作这些事情就可以了 数据类型/ 对象类型介绍(1)NSString 字符串是程序设计最常用的数据类型之一了。在Mac/iPhone编程中,苹果为我们提供了一个不同的字符串类型 NSString。有别与普通的String为数据类型,NSString其实是一个对象类型。NSString是NSObject(Cocoa Foundation的基础对象)的子类,所
16、以具有NSObject的所有特性,好的和好的 . 小常识: NS是Cocoa类对象类型的前缀,来源于史蒂夫-乔布斯被苹果开除那段时间建立的公司NeXT. 是Cocoa元素的前缀,很多地方我们会看到,比如接下来 1, 创建一个NSString对象 简单方法: NSString *aString = 我是个NS字符串!; /除了引号外加, 没别的区别 *上面的不需要操心内存管理哟 复杂一点儿:(需要内存管理的) NSString *aString = NSString alloc initWithFormat:这也是个NS字符串!; *initWithFormat是其中一个初始化方法,常用的还有
17、/从一个文件读取需要的内容 - (id)initWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError *)error /从一个地址读取需要的内容 - (id)initWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError *)error *以上方法得到的NSString的retain值为1,所以记得release掉阿 2,使用一个NSString对象 NSString *aString =
18、 This is a NSString; NSLog(aString); /在控制台输出信息,该函数方法需要一个NSString对象作为参数 NSLog(这样不会好使的); NSLog(这样就会好使拉); 再比如设置一个UIView的标题: UIView setTitle:aString; UIView setTitle:标题; UIView.title = aString; 3,释放NSString aString release; /对象将被系统释放掉咯 *记得不要释放直接用 = ”xxx” 的NSString对象哟,系统会管的 4,快速使用一个NSString NSLog(NSString stringWithFormat:一个NS字符串); /这种快速方法返回的是一个retain为1,autorelease的对象,不需要操心它的内存管理 5,常用方法 我喜欢NSString的地方就在于很多方法非常方便,比如: nString = aString substringToIndex:4; /nString将得到aString中的前四个字符