浏览 11734 次
锁定老帖子 主题:iPhone 笔记
精华帖 (1) :: 良好帖 (12) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-05-25
@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 从上面我们能看出来,一个实体Event也就会被生成一个NSManagedObject(被管理对象),然后任何accessor和getter 都是被动态生成的,我们其实完全不用操任何的心,只需要在xcdatamodel文件里面配置后,点击添加文件,添加NSManagedObject文件,就会看到自动感知的类对象,然后生成就可以了。 下面是根视图控制器,是一个列表视图(UITableViewController) #import <CoreLocation/CoreLocation.h> @interface RootViewController : UITableViewController <CLLocationManagerDelegate> { //看到是UITableViewController的子类,由于需要使用Core Location, //所以在后面履行其protocal NSMutableArray *eventsArray; NSManagedObjectContext *managedObjectContext; //这个被管理对象内容器就是我们真正对Core Data数据的操作对象 CLLocationManager *locationManager; //用来得到地理位置的Core Location对象 UIBarButtonItem *addButton; //右上角的添加键 } @property (nonatomic, retain) NSMutableArray *eventsArray; @property (nonatomic, retain) [...] CoreData 实例分析学习(1)补 CoreData实例分析学习(1) 补一下“实体”的概念,实体也就是Entity,在打开xcdatamodel文件的时候,我们可以看到 在这里,这个实体叫“Event”,而实体的参数有“创建日期”,“纬度”,“经度”。也就是说,其实这个实体被使用后,我们可以这样理解,实体就是表名,而参数就是列名,然后整个实体就是一张表。当这个Model描述多个实体的关系的时候,就像是一个关系型数据库一样,虽然苹果说“不是!” CoreData 实例分析学习(1) Core Data是个好东西,在数据储存操作上速度快,容易操作,是一种类似关系数据库的东西。但是有些不那么好学,那到底Core Data是怎么操作的呢?怎么用呢?怎么来编程呢?我们一起来学习吧,接下来使用苹果提供的实例程序Locations来作分析: >程序介绍: 右侧是改程序的截图,基本上来说就是通过使用Core Location来得到当时的位置,然后在点击“+”的时候记录下当时的经纬度。通过UITableViewController的功能来添加,编辑,删除等功能。整体程序使用Core Data来储存数据,实体(Entity)为一个位置,包括以下参数:1,时间(收集数据的时间)2,纬度,3,经度 首先我们看看该程序的AppDelegate.h @interface LocationsAppDelegate : NSObject { UIWindow *window; UINavigationController *navigationController; //导航栏 //以下定义了Core Data的三个决定性组建,等后面m文件里面再多介绍 NSPersistentStoreCoordinator *persistentStoreCoordinator; NSManagedObjectModel *managedObjectModel; NSManagedObjectContext *managedObjectContext; } @property (nonatomic, retain) IBOutlet UIWindow *window; @property (nonatomic, retain) UINavigationController *navigationController; - (IBAction)saveAction:sender; //这个没找到作用…根本就没用到IB //还记得吧,nonatomic是因为这个程序是单线程 @property (nonatomic, retain, readonly) [...] 得到用户的首选语言 NSUserDefaults* defs = [NSUserDefaults standardUserDefautls]; //得到用户缺省值 NSArray* languages = [defs objectForKey:@"AppleLanguages"]; //在缺省值中找到AppleLanguages, 返回值是一个数组 NSString* preferredLang = [languages objectAtIndex:0]; //在得到的数组中的第一个项就是用户的首选语言了 简单 iPhone视频播放器(1)补 在使用MP库之前是需要将其导入的,上次忘记了,这回将截图发上来 首先在左侧找到Targets 然后打开,双击这个工程名 你就可以看到下面的图了 点击左下角的+号 找到MediaPlayer.framework 然后点Add,完成!! 之后就只需要在需要使用库的地方添加下面的代码拉~ #import "MediaPlayer/MediaPlayer.h" 简单 iPhone视频播放器(1) 本程序源代码,不包含视频文件 视频播放在iPhone中是再重要不过了,今天要在30行内解决iPhone视频播放的问题! 1,建立工程MPtest1 2, 建立一个UIViewController类 MyMPViewController 3, 设置MPtest1AppDelegate初始化并添加MyMPViewController的view到window @interface MPtest1AppDelegate : NSObject <UIApplicationDelegate> { UIWindow *window; MyMPViewController *mpViewController; } @end - (void)applicationDidFinishLaunching:(UIApplication *)application { mpViewController = [[MyMPViewController alloc] init]; [window addSubview:mpViewController.view]; [window makeKeyAndVisible]; } 4, 设置MyMPViewController在一个按钮点击后播放视频 @interface 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, 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 那上面的是什么该死的意思呢? Copy其实是建立了一个相同的对象,而retain不是: 比如一个NSString对象,地址为0×1111,内容为@”STR” Copy到另外一个NSString之后,地址为0×2222,内容相同,新的对象retain为1,旧有对象没有变化 retain到另外一个NSString之后,地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1 也就是说,retain是指针拷贝,copy是内容拷贝。哇,比想象的简单多了… 在 iPhone上显示LCD效果 我看到一个程序是这样样子的: 哇!好厉害,怎么弄出来的!难道要用Q2D画出来么? 不… … 其实这就是UILabel外加一个奇异的字体 DBLCDTempBlack And, that’s it! 生活多么美好阿~ 不要对 viewController作这样的事情 错误: UIViewController *aViewController = [[UIViewController alloc] init]; [window addSubview:aViewController.view]; [aViewController release]; 这样的话,系统会崩溃的… window或着其他父视图是不会retain整个viewController的,这个时候不能立刻release 正确: [aViewController.view removeFromSuperview]; [aViewController release]; 也就是说,在release之前需要从superview中移除这个viewController的view。如果一直都需要这个view,那就在 dealloc里面作这些事情就可以了 数据类型/ 对象类型介绍(1)NSString 字符串是程序设计最常用的数据类型之一了。在Mac/iPhone编程中,苹果为我们提供了一个不同的字符串类型 NSString。有别与普通的String为数据类型,NSString其实是一个对象类型。NSString是NSObject(Cocoa Foundation的基础对象)的子类,所以具有NSObject的所有特性,好的和好的… …. 小常识: NS是Cocoa类对象类型的前缀,来源于史蒂夫-乔布斯被苹果开除那段时间建立的公司NeXT. @是Cocoa元素的前缀,很多地方我们会看到,比如接下来… 1, 创建一个NSString对象 简单方法: NSString *aString = @"我是个NS字符串!"; //除了引号外加@, 没别的区别 *上面的不需要操心内存管理哟~ 复杂一点儿:(需要内存管理的) NSString *aString = [[NSString alloc] initWithFormat:@"这也是个NS字符串!"]; *initWithFormat是其中一个初始化方法,常用的还有 //从一个文件读取需要的内容 - (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 = @"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中的前四个字符 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-05-27
楼主果然是经过研究才写上来的..受益了...
|
|
返回顶楼 | |
发表时间:2010-06-06
不错, Iphone的帖子太少了, 投精先!
说object-c 2支持 dot方式的消息传递,也就是支持 aString.substringToIndex(4) 那现在的Iphone用的哪个版本的object-c? |
|
返回顶楼 | |