• iOS学习笔记系列

    2016-08-16 11:07:27
    IOS学习笔记系列见简书,本博客不再更新: http://www.jianshu.com/notebooks/3815615/latest

    iOS学习笔记系列见简书,本博客不再更新:
    http://www.jianshu.com/notebooks/3815615/latest

    展开全文
  • 目录 1 导航模式的种类 1.1 平铺式导航 1.2 标签式导航 1.3 树形结构式导航 2 视图控制器的种类 2.1 使用UIViewController实现页面跳转 2.1.1 故事板布局 2.1.2调出Navigation Controller ......

     

    目录

    1 导航模式的种类

    1.1 平铺式导航

    1.2 标签式导航

    1.3 树形结构式导航

    2 视图控制器的种类

    2.1 使用UIViewController实现页面跳转

    2.1.1 故事板布局

    2.1.2 调出Navigation Controller

    2.1.3 给导航栏添加一个标题

    2.1.4 给NavigationBar添加跳转按钮

    2.1.5 添加第二个页面

    2.1.6 将“下一页”按钮和和第二页关联起来,点击后能够跳转

    2.1.7 Main.storyboard上的页面和具体类绑定

    2.1.8 具体代码

    2.1.9 测试效果图

    3.1 xib布局实现页面见跳转

    3.1.1 xib布局页面

    3.1.2 xib 中IBOutlet生成引用变量后运行报错原因检查

    3.1.3  添加第二个页面

    3.1.4 xib布局页面跳转运行效果


    上一章笔记中记录了NavigationBar的简单使用,并没有真正的使用它做页面之间的跳转,这里说说的页面跳转不是类似Android的Fragment之间的跳转,而是类似于Android中的从Activity跳转到另一个Activity,这一章将记录学习页面件跳转的内容。

    Cocoa Touch遵循了MVC的模式,这里学习的页面间的跳转也就是官方所说的导航,从一个View Controller到另一个View Controller。

    视图控制器又很多种类,其中不仅能够显示视图,也就是用户界面,也起到导航的作用。

     

    1 导航模式的种类

    1.1 平铺式导航

    平铺式导航有分屏和分页,在内容上是没有层级关系的,展示的内容都放在一个屏幕中,可以左右或者上下滑动,如:

     

    1.2 标签式导航

    将应用按照功能划分为多个功能模块,彼此之间独立,通过tab来切换各个功能模块,如下图:

     

    1.3 树形结构式导航

    属性结构的导航模式类似树形结构,分为枝叶,那些树叶属于那个枝干,是有层级俄关系的,典型的树形结构导航就是邮箱,如下图:

     

    2 视图控制器的种类

    视图控制器 视图控制器的在导航上的作用
    UIViewController 可用于自定义视图控制器的导航,用于界面间的跳转,比如用一个UIViewController控制另外2个UIViewController工作。
    UINavigationController 导航控制器,可以与UITableViewController结合使用,
    UITabBarController 标签栏控制器,可用于构建标签式导航模式
    UIPageViewController 电子书风格的导航控制器,主要用电子书和电子杂志类的应用开发,是IOS最近才推出的。
    UISplitViewController 主要用于ipad应用开发,分割屏幕风格的视图控制器
    UIPopoverController 主要用于ipad应用开发,气泡风格的控制器
       

     

     

     

     

     

     

     

     

     

     

     

     

    2.1 使用UIViewController实现页面跳转

    2.1.1 故事板布局

    首先在故事板的View Controller的顶部添加一个NavigationBar,中间添加一个Label,如下图:

    2.1.2 调出Navigation Controller

    故事板中选中 View Controller > 标题栏 Editor > Embed In > Navigation Contoller,调出Navigation Controller,如下图

    2.1.3 给导航栏添加一个标题

     

    2.1.4 给NavigationBar添加跳转按钮

    然后给NavigationBar 右边加一个跳转按钮 文案“下一页”

     

    2.1.5 添加第二个页面

    从视图对象库中拖拽一个View Controller放入故事板中,并重复第二步骤中的方法,调出Navigation Controller

     

    2.1.6 将“下一页”按钮和和第二页关联起来,点击后能够跳转

    按住contrl键,点击“下一页”按钮拖拽到第二个 Navigation Controller,也就是第二个控制器,弹出对话框选中show,然后可以看到中间生成了一个带圆圈的箭头,

    上面gif图演示了将两个场景关联的过程,然后生成下面图的关系,注意蓝色的框是Navigation Controller和自己View Controller的联系,这个是内在的,红色的框表示两个场景的关联,这样4个Controller就关联起来了。

    然后给第二个界面的NavigationBar左侧添加一个返回按钮,并将这个按钮用同样的方法和第一个Navigation Contoller关联起来买就会出翔下面的折线箭头,意思是点击返回,回到第一个界面

    注意下面红色方框中的箭头,表示是进入的第一个界面,如果我们在运行后发现界面是黑屏,肯定是这一个没有设置,这篇笔记的这个列子这箭头一定是从下面开始的,如果没有设置,记得选中进入的Controller,把右边的IS Initial View Controller勾选上,这里类似与Android中的清单文件中设置某一个Activity为启动页面一样。

     

    2.1.7 Main.storyboard上的页面和具体类绑定

    Main.storyboard上的每一个界面都需要有一个UIViewController与之对应,所以我们需要创建一个SecondViewController类,并让它和第二个页面关联起来。

    紧接着将联故事板中的Pager和类关联起来,接下来关联的是SecondViewController

     

    2.1.8 具体代码

    第一个页面的类都是xcode生成的没有任何改动

    #import "ViewController.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    
    @end
    
    

    第二个页面的类基本也是xcode生成的,只是手动增加了一个UILabel,其实也可以直接在Interface Builder里面拖拽生成,这里只是为了验证是否有作用,是否可以在里面编辑第二个界面。

    #import "SecondViewController.h"
    
    @interface SecondViewController ()
    
    @end
    
    @implementation SecondViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 124, 120, 30)];
        label.text = @"第二个页面";
        [self.view addSubview:label];
        
    }
    
    
    @end
    

     

    2.1.9 测试效果图

    点击“下一页”,进入第二个页面,点击“返回”回到第一个页面

     

     

    3.1 xib布局实现页面见跳转

    上面通过拖拽的方式很简单直观的学习了使用Navigation Controller 控制多个View Controller相互跳转,首先能够有可以下手的兴趣,那么问题来了,不是所有的时候都通过这种方式来做跳转,有时候也会只使用代码来做。使用纯代码实现起来,就稍许有点麻烦了。

     

    3.1.1 xib布局页面

    这里有个新需求需要完成,将上面故事板对应的界面使用xib分解成两个独立的存在,也就是一个xib对应一个界面,共2个界面,使用两个xib文件和ViewController,并让xib和自己对应的ViewController类相关联,然后做到上面相同的效果,不知道怎么使用xib布局的同学可以移步《IOS 学习笔记 使用xib文件构建界面》先看看看怎么操作。

    这里遇到个问题,在xib中布局后,往对应的ViewController拖拽生成一个属性变量,如下

    生成:@property (weak, nonatomic) IBOutlet UIBarButtonItem *nextButton;

    源码:

    #import "RootViewController.h"
    
    @interface RootViewController ()
    @property (weak, nonatomic) IBOutlet UIBarButtonItem *nextButton;
    
    @end
    
    @implementation RootViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view from its nib.
    }
    
    
    @end
    

    居然会报错,错误如下,如何解决,目前卡住了,网上的方法都不好使:

    2019-04-19 22:15:21.875193+0800 ControllerSimple[44628:1688645] libMobileGestalt MobileGestalt.c:890: MGIsDeviceOneOfType is not supported on this platform.
    2019-04-19 22:15:21.951738+0800 ControllerSimple[44628:1688645] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewController 0x7ffbe1505c30> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key nextButton.'
    *** First throw call stack:
    (
    	0   CoreFoundation                      0x000000010cd181bb __exceptionPreprocess + 331
    	1   libobjc.A.dylib                     0x000000010c2b6735 objc_exception_throw + 48
    	... ...

    最关键的一句话是:this class is not key value coding-compliant for the key nextButton,这句话的意思是“这个类的编码不兼容nextButton的key-value”,什么意思,让我们查找原因,如果去掉这个nextButton能够运行,但是这个变量却不能用了,而且绑定对应的点击函数也是一样报错。

     

    3.1.2 xib 中IBOutlet生成引用变量后运行报错原因检查

    上面步骤之后,引用报错:this class is not key value coding-compliant for the key nextButton

    1)File's Owner的class属性是否正确

    经过检查完全没有问题,如下图:

     

    2)IBOutlet的引用是否有多个

    经过检查也并没有出现多个

     

    3) AppDelegate中添加的ViewController的问题

    仔细思考之后,既然上面的问题都不存在,而且根据“this class is not key value coding-compliant for the key ”的意思,似乎是根本就是类加载的问题,在AppDelegate中我初始化了进入首页RootViewController,那可能是这个原因,之前我们按照《IOS 学习笔记 使用xib文件构建界面》的源码是:

    
     
    #import "AppDelegate.h"
     
    @interface AppDelegate ()
     
    @end
     
    @implementation AppDelegate
     
     
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
        
        //最后一步将创建xib文件绑定到window界面上
        self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
        self.window.rootViewController = [[UIViewController alloc]initWithNibName:@"RootViewController" bundle:nil];
        [self.window makeKeyAndVisible];
        return YES;
    }
     
     
    @end

     

    这里就有个问题了,UIViewController其实是系统提供的,对于初学者按照网上的写法直接就写了,其实这里我们并没构建这个类,我们构建的是RootViewController,所以上面写法有问题,而且我也在,《IOS 学习笔记 使用xib文件构建界面》加了一节,解决这个问题,也就是把上面代码中金黄色字体的“UIViewController”换成“RootViewController”,代码如下,更换后RootViewController的颜色就变成了灰色:

    
    #import "AppDelegate.h"
    #import "RootViewController.h"
    
    @interface AppDelegate ()
    
    @end
    
    @implementation AppDelegate
    
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
        CGRect screen = [[UIScreen mainScreen] bounds];
        self.window = [[UIWindow alloc]initWithFrame:screen];
    
        self.window.rootViewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];
        [self.window makeKeyAndVisible];
        return YES;
    }
    
    
    
    @end
    

    然后运行就没有问题了。

     

    3.1.3  添加第二个页面

    步骤根上面一个样,不过可以先添加一个group,鼠标放在主目录,右键选中New Group,输入second,表示第二个页面的group,然后在second组中New File,选中Cocoa Touch Class,输入SecondViewController,并勾选Also create XIB file:

      

       

    第二个界面到此初步创建成功,简单布局一下各自的界面,添加一个NavigtionBar ,在NavigationBar上面添加一个返回按钮,点击返回上一个界面:

    #import "RootViewController.h"
    #import "second/SecondViewController.h"
    
    @interface RootViewController ()
    @property (strong, nonatomic) IBOutlet UIBarButtonItem *nextButton;
    
    @end
    
    @implementation RootViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view from its nib.
    }
    
    - (IBAction)onClickNext:(id)sender {
        SecondViewController *secondViewController = [[SecondViewController alloc] init];
        UINavigationController *navigateionController = [[UINavigationController alloc] initWithRootViewController:secondViewController];
        
        [self presentViewController:navigateionController animated:YES completion:^{
            NSLog(@"OK let me enter second!");
        }];
    //    [self presentViewController:secondViewController animated:YES completion:^{
    //        NSLog(@"OK let me enter second!");
    //    }];
    }

     

    第二个界面需要添加一个返回,代码如下:

    #import "SecondViewController.h"
    
    @interface SecondViewController ()
    @property (strong, nonatomic) IBOutlet UIBarButtonItem *backButton;
    
    @end
    
    @implementation SecondViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view from its nib.
    }
    
    - (IBAction)onCLickBack:(id)sender {
        [self dismissViewControllerAnimated:YES completion:^{
            NSLog(@"back to MainPage!");
        }];
    }
    
    
    @end
    

    3.1.4 xib布局页面跳转运行效果

     

    4.1 纯代码实现

    纯代码实现就不写了,也就是布局都是通过代码来实现的,业务逻辑是一样的。

     

    展开全文
  • 2013第一篇,大家新年快乐!感谢一直关注我博客的同学们,有你们的支持我才有动力越做越好!有阵子没写博客了,因为前阵子着实...早前写过一篇《IOS学习笔记22—文件操作(NSFileManager)结合相册小例子》,随着iOS

    2013第一篇,大家新年快乐!感谢一直关注我博客的同学们,有你们的支持我才有动力越做越好!偷笑有阵子没写博客了,因为前阵子着实比较忙,没时间整理,今天主要实现一个小Demo,我们知道在Instagram或Path上,头像都是正方形的,得到这种头像图片肯定要对原图进行截取,今天抽时间整理了下,先记录如下!早前写过一篇《IOS学习笔记22—文件操作(NSFileManager)结合相册小例子》,随着iOS SDK的升级,拍照及从相册选取图片的实现过程发生了一点小变化,比如UIImagePickerControllerDelegate的回调方法。现结合一个Demo简要介绍其实现过程。首先,裁剪图片的功能借助了Github上的项目AGSimpleImageEditorView。不多说,一步步的看Demo的实现过程吧:


    1.下载Github上这个项目工程到本地并将其拖入到自己的工程中(前提是你已经建立了工程大笑),由于AGSimpleImageEditorView不支持ARC,所以还要做相应的配置,设置编译器标签-fno-objc-arc:



    另外,由于使用到图形处理和图片处理,所以还要另外导入两个库,如下图


    完成后,按command+B编译试试,如果没问题,说明工程集成成功了,下面就可以开始编码了,如果不成功,检查一下错误来源,上述步骤是否完整。


    代码部分:以下均为关键代码,具体细节没有列举,注释写的非常详细,就不赘述了


    2.新建PassImageDelegate协议作为在展示界面和截取界面间传值的代理(这个demo用到两种传值方式,不是很了解的可以参考一下《IOS学习笔记30—两个ViewController间传值(一)》),新建CaptureViewController作为截取图片功能的模块。PassImageDelegate部分代码如下:

    #import <Foundation/Foundation.h>
    
    @protocol PassImageDelegate <NSObject>
    
    -(void)passImage:(UIImage *)image;
    
    @end

    CaptureViewController.h部分关键代码,主要是初始化截取界面,截取成功后的处理等:

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        
        //添加导航栏和完成按钮
        UINavigationBar *naviBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
        [self.view addSubview:naviBar];
        
        UINavigationItem *naviItem = [[UINavigationItem alloc] initWithTitle:@"图片裁剪"];
        [naviBar pushNavigationItem:naviItem animated:YES];
        
        //保存按钮
        UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStylePlain target:self action:@selector(saveButton)];
        naviItem.rightBarButtonItem = doneItem;
        
        //image为上一个界面传过来的图片资源
        editorView = [[AGSimpleImageEditorView alloc] initWithImage:self.image];
        editorView.frame = CGRectMake(0, 0, self.view.frame.size.width ,  self.view.frame.size.width);
        editorView.center = self.view.center;
        
        //外边框的宽度及颜色
        editorView.borderWidth = 1.f;
        editorView.borderColor = [UIColor blackColor];
        
        //截取框的宽度及颜色
        editorView.ratioViewBorderWidth = 5.f;
        editorView.ratioViewBorderColor = [UIColor orangeColor];
        
        //截取比例,我这里按正方形1:1截取(可以写成 3./2. 16./9. 4./3.)
        editorView.ratio = 1;
        
        [self.view addSubview:editorView];
    }
    
    //完成截取
    -(void)saveButton
    {
        //output为截取后的图片,UIImage类型
        UIImage *resultImage = editorView.output;
        
        //通过代理回传给上一个界面显示
        [self.delegate passImage:resultImage];
        
        [self dismissModalViewControllerAnimated:YES];
    }
    

    3.主界面打开选项列表并选择拍照或是从相册选择图片代码:

    //弹出选项列表选择图片来源
    - (IBAction)choseButtonClicked:(id)sender {
        UIActionSheet *chooseImageSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Camera",@"Photo library", nil];
        [chooseImageSheet showInView:self.view];
    }
    
    #pragma mark UIActionSheetDelegate Method
    -(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
    {
        UIImagePickerController * picker = [[UIImagePickerController alloc] init];
        picker.delegate = self;
        
        switch (buttonIndex) {
            case 0://Take picture
                
                if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
                    picker.sourceType = UIImagePickerControllerSourceTypeCamera;
                    
                }else{
                    NSLog(@"模拟器无法打开相机");
                }
                [self presentModalViewController:picker animated:YES];
                break;
                
            case 1://From album
                picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
                [self presentModalViewController:picker animated:YES];
                break;
                
            default:
                
                break;
        }
    }
    

    拍照或选择图片后的回调方法:

    #pragma 拍照选择照片协议方法
    -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    {
        
        [UIApplication sharedApplication].statusBarHidden = NO;
        
        NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
        
        NSData *data;
        
        if ([mediaType isEqualToString:@"public.image"]){
            
            //切忌不可直接使用originImage,因为这是没有经过格式化的图片数据,可能会导致选择的图片颠倒或是失真等现象的发生,从UIImagePickerControllerOriginalImage中的Origin可以看出,很原始,哈哈
            UIImage *originImage = [info objectForKey:UIImagePickerControllerOriginalImage];
            
            //图片压缩,因为原图都是很大的,不必要传原图
            UIImage *scaleImage = [self scaleImage:originImage toScale:0.3];
            
            //以下这两步都是比较耗时的操作,最好开一个HUD提示用户,这样体验会好些,不至于阻塞界面
            if (UIImagePNGRepresentation(scaleImage) == nil) {
                //将图片转换为JPG格式的二进制数据
                data = UIImageJPEGRepresentation(scaleImage, 1);
            } else {
                //将图片转换为PNG格式的二进制数据
                data = UIImagePNGRepresentation(scaleImage);
            }
            
            //将二进制数据生成UIImage
            UIImage *image = [UIImage imageWithData:data];
            
            //将图片传递给截取界面进行截取并设置回调方法(协议)
            CaptureViewController *captureView = [[CaptureViewController alloc] init];
            captureView.delegate = self;
            captureView.image = image;
            //隐藏UIImagePickerController本身的导航栏
            picker.navigationBar.hidden = YES;
            [picker pushViewController:captureView animated:YES];
            
        }
    }
    

    回调方法,显示截取后的图片

    #pragma mark - 图片回传协议方法
    -(void)passImage:(UIImage *)image
    {
        //将截取的图片显示在主界面
        imageView.image = image;
    }

    最后就是一段缩放图片的方法:

    #pragma mark- 缩放图片
    -(UIImage *)scaleImage:(UIImage *)image toScale:(float)scaleSize
    {
        UIGraphicsBeginImageContext(CGSizeMake(image.size.width*scaleSize,image.size.height*scaleSize));
        [image drawInRect:CGRectMake(0, 0, image.size.width * scaleSize, image.size.height *scaleSize)];
        UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return scaledImage;
    }
    

    完成后到真机上运行,效果如下:

                            


    拍照后选择图片后进入到裁剪界面,裁剪完成后显示裁剪结果:

                            



    加入我们的QQ群或微信公众账号请查看:Ryan's zone公众账号及QQ群


    觉得文章对你有用,欢迎关注我的新浪微博和我交流:@唐韧_Ryan


    工程下载:Demo源码


    展开全文
  • 在之前的学习笔记IOS学习笔记33—XML解析之KissXML的使用》中介绍了如何解析XML格式的数据,今天简要介绍下如何解析JSON格式的数据,JSON数据结构以其轻量化的结构体和良好的可读性被越来越广泛的运用,特别在移动...

    在之前的学习笔记《IOS学习笔记33—XML解析之KissXML的使用》中介绍了如何解析XML格式的数据,今天简要介绍下如何解析JSON格式的数据,JSON数据结构以其轻量化的结构体和良好的可读性被越来越广泛的运用,特别在移动开发上,手机的流量是宝贵资源,更要求使用轻量级的数据格式进行数据传输。关于在iOS平台上进行JSON解析,已经有很多第三方的开源项目,比如SBJson、JSONFramwork等,用的也非常广泛,自从iOS5.0以后,苹果推出了SDK自带的JSON解决方案NSJSONSerialization,这是一个非常好用的JSON生成和解析工具,效率也是比其他第三方开源项目的高很多,详情可查看Developer Guider


    关于NSJSONSerialization,官方文档中有如下介绍:

    You use the NSJSONSerialization class to convert JSON to Foundation objects and convert Foundation objects to JSON.

    An object that may be converted to JSON must have the following properties:

    • The top level object is an NSArray or NSDictionary.

    • All objects are instances of NSStringNSNumberNSArrayNSDictionary, or NSNull.

    • All dictionary keys are instances of NSString.

    • Numbers are not NaN or infinity.

    我们能利用NSJSONSerialization将JSON转换成Foundation对象,也能将Foundation对象转换成JSON,转换成JSON的对象必须具有如下属性:

    • 顶层对象必须是NSArray或者NSDictionary
    • 所有的对象必须是NSString、NSNumber、NSArray、NSDictionary、NSNull的实例
    • 所有NSDictionary的key必须是NSString类型
    • 数字对象不能是非数值或无穷

    接下来看看如何使用,首先是如何生成JSON格式的数据:
    我这里选用项目中的代码片段来进行简要介绍,以下显示了登陆请求JSON格式数据的生成
    NSDictionary *registerDic = [NSDictionary dictionaryWithObjectsAndKeys:uuid,@"_id",userName,@"login_name",password,@"password", nil];
        if ([NSJSONSerialization isValidJSONObject:registerDic]) {
            NSError *error;
            NSData *registerData = [NSJSONSerialization dataWithJSONObject:registerDic options:NSJSONWritingPrettyPrinted error:&error];
            NSLog(@"Register JSON:%@",[[NSString alloc] initWithData:registerData encoding:NSUTF8StringEncoding]);
        }

    NSDictionary中的key就是json字符串中的key,object就是json字符串中的value,isValidJSONObject:方法是检测Foundation对象能否合法转换为JSON对象,dataWithJSONObject:options:error方法是将Foundation对象转换为JSON对象,参数NSJSONWritingPrettyPrinted的意思是将生成的json数据格式化输出,这样可读性高,不设置则输出的json字符串就是一整行。

    解析服务端返回的json格式数据:
    NSDictionary *resultJSON = [NSJSONSerialization JSONObjectWithData:resultData options:kNilOptions error:&error];

    获取返回字符串中key为status的value:
    NSString *status = [resultJSON objectForKey:@"status"];

    以上就简要的介绍了下NSJSONSerilazation的使用,不是很全面,以后有时间再深入详解一下。

    加入我们的QQ群或微信公众账号请查看:Ryan's zone公众账号及QQ群


    欢迎关注我的新浪微博和我交流:@唐韧_Ryan




    展开全文
  • IOS学习笔记2—Objective C—简单的内存管理IOS学习笔记3—Objective C—创建单例IOS学习笔记4—Objective C—类别和协议IOS学习笔记5—Objective C—Foundation框架IOS学习笔记6—IOS触摸事件监听和操作IOS学习笔记...

     

    IOS学习笔记1—Objective C—类、属性、方法

     

    IOS学习笔记2—Objective C—简单的内存管理

    IOS学习笔记3—Objective C—创建单例

    IOS学习笔记4—Objective C—类别和协议

    IOS学习笔记5—Objective C—Foundation框架

    IOS学习笔记6—IOS触摸事件监听和操作

    IOS学习笔记7—UIControl对象详解

    IOS学习笔记8—IOS通知中心

    IOS学习笔记9—UITabBarController

    IOS学习笔记10—UINavigationController

    IOS学习笔记11—用户首选项NSUserDefaults

    IOS学习笔记12——SQLite数据库

    IOS学习笔记13——Core Data

    IOS学习笔记14——Core Location

    IOS学习笔记15—UIImagePickerController(图像选取器)

    IOS学习笔记16—沙盒机制(SandBox)

    IOS学习笔记17—文件操作(NSFileManager)结合相册小例子

    IOS学习笔记18—多线程之NSThread、NSOperation、NSInvocationOperation

    OS学习笔记19—HTTP操作之ASIHTTPRequest(一)

    IOS学习笔记20—HTTP操作之ASIHTTPRequest(二)

    IOS学习笔记21—使用GDataXML解析XML文档

    IOS学习笔记22—SQLite3第三方库之FMDB

    IOS学习笔记23—提示框第三方库之MBProgressHUD

    IOS学习笔记24—两个ViewController间传值(一)

    IOS学习笔记25—两个ViewController间传值(二)

    IOS学习笔记26—使用Storyboard实现复杂界面

    IOS学习笔记27—EGOTableViewPullRefresh实现下拉刷新

    IOS学习笔记28—Xcode4.5后国际化的使用

    IOS学习笔记29—XML解析之KissXML的使用

    转载于:https://www.cnblogs.com/yukg/archive/2012/11/21/2781138.html

    展开全文
  • 1.id与instanncetypeid 与 instancetype 区别 1.id 可以当返回值类并且可以声明对象 2.instancetype 只可以当返回值类型 3.instancetype 返回和方法所在类相同类型的对象,id返回未知类型的对象(instancetype ...
  • IOS学习笔记-加速度传感器(重力感应)-UIAccelerometer
  • iOS学习笔记

    2015-05-21 13:06:21
    iOS学习笔记
  • iOS学习笔记

    2015-05-19 23:31:34
    iOS学习笔记
  • iOS学习笔记之CoreGraphics框架
  • IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- --------------------------------- qq交流群:创梦技术交流群:251572072  创梦网络赚钱群:248318056  
  • iOS学习笔记06—Category和Extension   一、概述 类别是一种为现有的类添加新方法的方式。 利用Objective-C的动态运行时分配机制,Category提供了一种比继承(inheritance)更为简洁的方法来对class...
  • iOS学习笔记11—本地通知UILocalNotification  本地通知,用于基于时间行为的通知。 操作系统负责提供在适当的时候分发本地通知给应用程序(注意通知不是由应用来分发),应用程序无需处于运行状态。与远程...
  • 本文原始地址:OpenCV for Ios 学习笔记(7)-标记姿态的模拟 在前面,我们已经获取到了精确的标记角点,我们能够模拟出相机与3维空间中标记之间的变换。这个过程中我们将会在相机与物体之间发现欧式变换-只...
  • 上次在《iOS学习笔记46——图片异步加载之SDWebImage》中介绍过一个开源的图片异步加载库,今天来介绍另外一个功能类似的EGOImageLoading,看名字知道,之前的一篇学习笔记IOS学习笔记34—EGOTableViewPullRefresh...
  • 在之前有一篇学习笔记中,记载了一篇如何在OC中实现单例的文章:《IOS学习笔记4—Objective C—创建单例》自苹果引入了Grand Central Dispatch (GCD)(Mac OS 10.6和iOS4.0)后,创建单例又有了新的方法,那就是...
  • iOS学习笔记

    2015-05-20 20:24:13
    iOS学习笔记二 占个地方,后面写。
1 2 3 4 5 ... 20
收藏数 54,510
精华内容 21,804