您的当前位置:首页正文

iPhone 笔记

来源:爱够旅游网
#

@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

@interface RootViewController : UITableViewController { //看到是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 { 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中的前四个字符

因篇幅问题不能全部显示,请点此查看更多更全内容