CodingNet - Learning - 7

这里用简单的例子讲解一下,CodingNet数据模型:

按如下图打一个断点,我们来追踪这个操作,并且将客户端本地缓存和服务器等等交互连串起来



接着我们在介绍页里点击登录,会发现上面的运行情况


可以知道:

- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:YES animated:YES];
    [self refreshCaptchaNeeded];			// 这里产生了对服务器的Get请求
    [self refreshIconUserImage];
}

接着请求操作中:

[self GET:aPath parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
    
    id error = [self handleResponse:responseObject autoShowError:autoShowError];
    if (error) {
        responseObject = [NSObject loadResponseWithPath:localPath];
        block(responseObject, error);
        
    }else{
        if ([responseObject isKindOfClass:[NSDictionary class]]) {
            if ([responseObject[@"data"] isKindOfClass:[NSDictionary class]]) {
                if (responseObject[@"data"][@"too_many_files"]) {
                    if (autoShowError) {
                        [NSObject showHudTipStr:@"文件太多,不能正常显示"];
                    }
                }
            }
            // 这里调用了Login 数据模型的方法
            [NSObject saveResponseData:responseObject toPath:localPath];	
        }
        block(responseObject, nil);
    }
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    !autoShowError || [NSObject showError:error];
    id responseObject = [NSObject loadResponseWithPath:localPath];
    block(responseObject, error);
}];


具体实现:

//网络请求
+ (BOOL)saveResponseData:(NSDictionary *)data toPath:(NSString *)requestPath{
    User *loginUser = [Login curLoginUser];
    if (!loginUser) {
        return NO;
    }else{
        requestPath = [NSString stringWithFormat:@"%@_%@", loginUser.global_key, requestPath];
    }
    if ([self createDirInCache:kPath_ResponseCache]) {
        NSString *abslutePath = [NSString stringWithFormat:@"%@/%@.plist", [self pathInCacheDirectory:kPath_ResponseCache], [requestPath md5Str]];
        return [data writeToFile:abslutePath atomically:YES];
    }else{
        return NO;
    }
}



向服务器请求,请求成功,将请求内容存在本地,并外放接口curLoginUser查看当前的用户登录信息


还有一些结合,UserDefault和Cookies的机制也是非常非常好

+ (void)doLogin:(NSDictionary *)loginData{
    
    NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];
    [cookies enumerateObjectsUsingBlock:^(NSHTTPCookie *  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        NSLog(@"cookies : %@", obj.description);
    }];
    
    if (loginData) {
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        [defaults setObject:[NSNumber numberWithBool:YES] forKey:kLoginStatus];
        [defaults setObject:loginData forKey:kLoginUserDict];
        curLoginUser = [NSObject objectOfClass:@"User" fromJSON:loginData];
        [defaults synchronize];
        [Login setXGAccountWithCurUser];
        
        [self saveLoginData:loginData];
    }else{
        [Login doLogout];
    }
}



AppInventor2-2018版.rar 大家下载后,解压后可以看到有3个文件夹,分别是(1)AppInventor2018PersonalEdition_Win是个人离线版; (2)AI2Companion_Win7_64bit是桌面版AI伴侣Win7_64位版; (3)AI2Companion_Win7_32bit是桌面版AI伴侣Win7_32位版。文件夹(2)和(3)是用于测试的桌面版AI伴侣,分别是Win7操作系统32位和64位的。前面测试过,Win10也同样适用。特别注意有些杀毒软件可能会认为是病毒,建议在解压之前先关闭杀毒软件。 【启动服务】 图片 打开AppInventor2018PersonalEdition_Win文件夹后,最后一个文件‘启动AppInventor.cmd’是启动文件。执行启动文件,将打开两个黑色的命令执行窗口。如下2图所示。其中的Dev Server为开发服务器,在整个的开发设计过程中必须保持这个窗口处于开启状态,可以最小化,但不能关闭。另一个窗口的标题是Build Server…,这个是编译服务器窗口,当你选择编译菜单时,这个窗口的内容会刷新。在日常开发过程中,如果暂时不需要编译项目,可以将这个窗口关闭。同时要注意在服务启动过程中,如果系统防火墙提示是否允许该程序的运行,选择“允许”即可。 图片 图片 图片 【打开App Inventor开发环境】 服务启动成功后,在浏览器地址栏中输入localhost:8888(或是127.0.0.1:8888也可),即可打开App Inventor开发环境。 图片 【启动桌面AI伴侣】 打开AI2Companion_Win7_64bit(或AI2Companion_Win7_32bit)文件夹,其中启动命令为ailaunch.bat,执行该命令,将启动桌面版AI伴侣。 图片 AI伴侣启动过程中,会打开一个命令窗口,第一行显示的“错误:没有找到进程aicompanion*”是批处理文件中的提示信息,不影响伴侣的启动和使用,不必介意它。 图片 【链接开发环境与AI伴侣】 在开发环境中点击菜单“连接→AI伴侣”,将弹出一个窗口,其中显示一个二维码,以及一行6位编码,将六位编码输入到AI伴侣的输入框中,并点击“用编码进行连接”,即可完成开发环境与AI伴侣之间的连接。在实际的操作的过程中,我们经常想复制6位编码到AI伴侣,特别提醒,在开发环境中6位编码,只能右键鼠标点复制,而到AI伴侣界面,只能按Ctrl+v复制。 图片图片 【重新启动AI伴侣】 用鼠标右键点击AI伴侣右上角的“x”号,可以弹出右键菜单,其中前两项分别为“重新加载应用”及“模拟浏览器重启”,如果把AI伴侣理解为浏览器,那么前者相当于刷新页面,后者相当于重启浏览器。 图片 错误情况分析:如果在浏览器中启动开发环境时出现以下的界面,只要把’AppInventor2018PersonalEdition_Win是离线包个人版’复制到任何盘的根目录下即可!(AppInventor2019版解决了这个问题)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值