iOS 开发问题小结two

来源:互联网 发布:红蜘蛛软件 路由器 编辑:程序博客网 时间:2024/05/22 09:43

UIPageViewController,值得注意的是设置了datasource,此外,datasource最好是一个直接继承NSObject的自定义类。
此外还需要设置initial content就是设置viewControllers这个是必须的,因为这个是第一页内容的显示。
Datasource
Delegate
Controllers(Array)
Gestures(Array)
UIgesturerecognization: http://blog.csdn.net/totogo2010/article/details/8615940/
—2015.11.4
IOS uitabbarcontroller和UInavigation 综合使用的时候,在设置viewcontrollr的Title的时候要用viewcontroller.navigationitem.title,而不是viewcontroller.title,因为如果用后者那么navigation.tabbaritem.title的值会被覆盖。

今天修理了前面做的细节问题:
1. cell有自带的label,imageView属性,

这样就可以省去再添加这些,可以节省空间。
2. 用UITableViewDelegate的方法

这个方法只是对对应的行进行了预留,而不是改变cell的高度。Cell的高度一般要重写initWithFrame的方法,或者是自定义cell改变其高度。不过cell的高度并不影响显示效果。(目前是这样的)。
3. 往工程添加文件或者图片的时候,故事版要选择ADD的Copy if needed的选项,否则可能会出现显示不出或者程序找不到文件。
4.就是调用顺序的问题,在用某个对象的属性值的时候,要先确保该对象已经初始化并且赋值。
5. UIPageContrl的currentPage属性是跟当前显示的页面一致的,所以显示哪一页其值自动更新。
6.拿到一个页面布局的时候要考虑其扩展性。
7.在 iOS 7 中,如果某个 UIViewController 的 self.view 第一个子视图是 UIScollView, 同时当这个 UIViewController 被 push 或 initWithRootController 成为 UINavigationController控制的Controller时,这个 UIViewController的 view 的子视图 UIScollView 的所有子视图, 都会被下移 64px。
这个下移 64px 的前提是 navigationBar 和 statusBar 没有隐藏。因为为 statusBar 默认的 Height 是 20px,而 navigatiBar 默认的 Height 是 44px。
解决办法一:在 ViewController 的 init 的方法中增加一行代码:
self.automaticallyAdjustsScrollViewInsets = NO;
解决办法二:让UIScrollView 不要成为 ViewController 的 View 的第一个子视图。具体操作:将 viewDidLoad方法 修改成如下:
- (void)viewDidLoad
{
[super viewDidLoad];

 UIView *firstSubView = [[UIView alloc] initWithFrame:self.view.bounds]; [self.view addSubview:firstSubView]; UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(30.0,                                                           64.0, 260.0, 300.0)]; [scrollView setBackgroundColor:[UIColor redColor]]; UIView *view = [[UIView alloc] initWithFrame:scrollView.bounds]; [view setBackgroundColor:[UIColor blueColor]]; [scrollView addSubview:view]; [self.view addSubview:scrollView];

}
解决办法三: 将 UIScorllView 的子视图上移 64.0px 。修改 viewDidLoad 方法:
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(30.0, 64.0, 260.0, 300.0)];
[scrollView setBackgroundColor:[UIColor redColor]];

 CGRect viewFrame = CGRectMake(0, -64.0, CGRectGetWidth(scrollView.frame),                                                                                    CGRectGetHeight(scrollView.frame));  UIView *view = [[UIView alloc] initWithFrame: viewFrame];  [view setBackgroundColor:[UIColor blueColor]];  [scrollView addSubview:view];  [self.view addSubview:scrollView];

对于我的项目,是Scroll与pageControl的结合使用,办法三是不可取的,因为视图自动上移64px,当pageControl自动更新,会上移,所以我采取的是最简洁的第一种解决办法。

ios强大的第三方库:
MBProgressHub,SDWebimage,AFNetworking.KVOController,Mantle,MessageDisplayKit.
回调:
block,不影响程序的正常运行,但是是程序的部分。相当于程序做自己的事的同时分出一个线程去执行另一件事,然后在特定条件下返回结果。
–2015.12.2

iOS NSCoder,NSCoding,NSKeyedachiver,NSUserDefault
1到底这个序列化有何作用?
面向对象的程序在运行的时候会创建一个复杂的对象图,经常要以二进制的方法序列化这个对象图,这个过程叫做Archiving. 二进制流可以通过网络或写入文件中。
当你写的数据需要本地存储时,即将你的数据写到硬盘上的时候,你就必须对其进行序列化,转换成二进制文件,从而便于在磁盘上的读写,同理在取出的时候必须将其在反序列化,这样才能将数据读出来,就好比加密和解密的过程。
2 为什么将数据写到plist 中的时候,也是存储到本地的磁盘上,但是没有序列化?
大家有没有发现,其实plist 的数据是类型是有限制的,就那么几种特定的数据类型nsstring ,大家有没有尝试过将一个自己定义的类放进去(写进plist ),再读出来?
结果是什么大家可以先猜想。
其实在nsstring 的类的定义中已经添加了协议 即实现了nscoding 代理的方法。

@interface  NSString : NSObject <NSCopying, NSMutableCopying, NSCoding>

深入
3 NScoder 和 NScoding
NScoding 是一个协议,主要有下面两个方法
-(id)initWithCoder:(NSCoder *)coder;//从coder中读取数据,保存到相应的变量中,即反序列化数据
-(void)encodeWithCoder:(NSCoder *)coder;// 读取实例变量,并把这些数据写到coder中去。序列化数据
NSCoder 是一个抽象类,抽象类不能被实例话,只能提供一些想让子类继承的方法。
NSKeyedUnarchiver 从二进制流读取对象。
NSKeyedArchiver 把对象写到二进制流中去。
4.一个简单的例子
一般是在自己定义的类中需要在.h 文件中加入
在.m 文件众实现他的的两个代理方法,这个代理方法将会被自动调用

- (void)encodeWithCoder:(NSCoder *)aCoder {    [aCoder encodeObject:self.InsureSolutionID forKey:@"personName"];    [aCoder encodeObject:self.InsureSolutionName forKey:@"personAge"];}- (id)initWithCoder:(NSCoder *)aDecoder {    self = [super init];    if (self)     {        self.InsureSolutionID = [aDecoder decodeObjectForKey:@"personName"];        self.InsureSolutionName = [aDecoder decodeObjectForKey:@"personAge"];    }    return self;}

以上是对该类序列化和反序列化。

NSData *archiveCarPriceData = [NSKeyedArchiver archivedDataWithRootObject:self.DataArray];    [[NSUserDefaults standardUserDefaults] setObject:archiveCarPriceData forKey:@"DataArray"]; NSData *myEncodedObject = [[NSUserDefaults standardUserDefaults] objectForKey:@"DataArray"];self.dataList = [NSKeyedUnarchiver unarchiveObjectWithData: myEncodedObject];

iOS NSUserDefaults:
1. NSUserDefaults适合存储轻量级的本地数据,一些简单的数据(NSString类型的)例如密码,网址等,NSUserDefaults肯定是首选,但是如果我们自定义了一个对象,对象保存的是一些信息,这时候就不能直接存储到NSUserDefaults了
2. 了解NSUserDefaults以及它可以直接存储的类型

  NSUserDefaults是一个单例,在整个程序中只有一个实例对象,他可以用于数据的永久保存,而且简单实用,这是它可以让数据自由传递的一个前提,也是大家喜欢用它保存简单数据的一个主要原因。       使用 NSUserDefaults 存储自定义对象的最初,我们必须认识NSUserDefaults可以存储哪一些类型的数据,下面一一列出:

NSUserDefaults支持的数据类型有:NSNumber(NSInteger、float、double),NSString,NSDate,NSArray,NSDictionary,BOOL.

  1. 如何存储自定义对象
    1、将自定义类型转换为NSData类型
    当数据重复而且多的时候(例如想存储全班同学的学号,姓名,性别(这个数据量可能太大了 )),如果不用SQLite 存储 (多数据最好还是用这个),你可以选择使用归档,再将文件写入本地,但是这种方式和 NSUserDefaults 比起来麻烦多了(因为NSFileManage 本来就挺复杂) ,但是问题是,NSUserDefaults 本身不支持自定义对象的存储,不过它支持NSData的类型,下面举一个例子来介绍。

我们先建立一个叫Student 的类,这个类里有三个属性(学号,姓名,性别)

#import <Foundation/Foundation.h>@interface Student:NSObject<NsCoding>@property(strong,nonamic) NSString *name;@property(strong, nonamic) NSString *number;@property(strong, nonamic) NSString * sex;@end@implement Student@Synthesize name;@Synthesize number;@Synthesize sex;-(void)encodeWithCoder:(NsCoder *)aCoder{    [aCoder encodeWithCoder:self.name forKey:@"name"];    [aCoder encodeWithCoder:self.number forKey:@"number"];    [aCoder encodeWithCoder:self.sex forKey:@"sex"];}-(id)initWithCoder:(NSCoder *)aDecoder{     if(self == [super init])     {           self.name = [aDecoder decodeObjectforKey:@"name"];           self.name = [aDecoder decodeObjectforKey:@"number"];           self.name = [aDecoder decodeObjectforKey:@"sex"];     }     return self;}

将自定义对象转换成NSData类型。
2、将自定义类型数据存入 NSUserDefaults 中
如果要存储全班同学的信息,我们可以建一个NSMutableArray 来存放全班同学的信息(里面存储的全是NSData对象)在需要存储的地方加入代码:
具体代码在2015.12 -> NSUserDefault
因为去年做iOS开发是自己做的笔记,所以都记了日期!

0 0
原创粉丝点击