我的GitHub
0%

接上一篇无星的RN学习之旅(一)最后我给出了一个基础项目地址进行学习。
PS:我使用的是VSCode编译器和Xcode编译器
一、RN如何调用原生方法
1.在新建的项目中打开ios目录下的工程文件,同时使用VSCode打开项目目录。
新建NSObjec对象,名字任意,我这里叫RNruniOS

.h文件添加RCTBridgeModule.h头文件,RCTBridgeModule协议

1
2
3
4
5
6
//RNruniOS.h文件
#import <Foundation/Foundation.h>
#import "React/RCTBridgeModule.h"
@interface RNruniOS : NSObject<RCTBridgeModule>

@end

.m文件添加RCTConvert.h头文件,并添加相应宏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//RNruniOS.m文件
#import "RNruniOS.h"
//RCTConvert提供了一系列辅助函数,用来接收一个JSON值并转换到原生Objective-C类型或类。
#import "React/RCTConvert.h"
@implementation RNruniOS

//为了实现RCTBridgeModule协议,需要包含RCT_EXPORT_MODULE()宏。
//这个宏也可以添加一个参数用来指定在Javascript中访问这个模块的名字。
//如果不指定,默认就会使用这个Objective-C类的名字。
RCT_EXPORT_MODULE()

//通过RCT_EXPORT_METHOD()宏声明要给Javascript导出的方法,否则React Native不会导出任何方法。
RCT_EXPORT_METHOD(RNiOSLog:(NSString*)msg)
{
NSLog(@"RN调用iOS打印方法信息是%@",msg);
}

@end

2.在rn项目中的index.ios.js文件进行调用

1
2
//RN调用iOS原生方法,定义一个变量
var RNruniOS = NativeModules.RNruniOS;
1
2
//RN调用原生方法
RNruniOS.RNiOSLog('RN调用iOS打印方法成功。');

通过xcode进行项目编译,点击相应按钮触发事件即可看见控制台打印输出log信息。
该小练习github地址:https://github.com/XingXiaoWu/RNruniOS

二、回调函数CallBack的使用
无星的RN学习之旅(一)-环境安装以及新建项目
无星的RN学习之旅(三)
无星的RN学习之旅(四)——通信、持久化存储、xcode打包
无星的RN学习之旅(五)-关于react-navigation多层级页面返回时,去掉逐层推出动画
无星的RN学习之旅(六)-第三方App跳转,苹果商店跳转,loading框

阅读全文 »

iOS菜鸟,本周开始了react native的学习。
(一)环境安装
官网写的很详细,我觉得就没必要重新再啰嗦了。
官网地址:
http://reactnative.cn/docs/0.46/getting-started.html
(二)新建第一个项目
1.打开“终端”输入

1
react-native init MyApp --version 0.44.3

注意:init命令默认会创建最新的版本,而目前最新的0.45及以上版本需要下载boost库编译。此库体积庞大,在国内即便翻墙也很难下载成功,导致很多人无法正常运行iOS项目,推荐暂时使用0.44.3的版本。
2.创建成功后cd到项目路径下

1
cd MyApp

3.运行该项目

1
react-native run-ios

P.S 我是运行iOS,如果运行安卓就输入

1
react-native run-android

我创建了一个练习文件,可供练习,这五个练习完成应该就能初步知道怎么交互了。包括我的学习路线怎么完成也会慢慢更新~

界面图
地址是:https://github.com/XingXiaoWu/React-Native-First
不如随手点个star让楼主也开心一整天~

阅读全文 »

这个是一些小坑,大牛们忽略。

1.有些时候,后台传输一些json数据会是Unicode码,如果存在在数组里,就更尴尬了,无法转成数组,那么这时候怎么办呢。

例如.png

这时候,一定要把\U转换成\u,转换成功即可正常使用。
2.如何判断属于什么类型。
数据属于什么类型,使用iskindofclass来进行判断

再例如.png

3.如何将json串转换成dic或array
如果json数据正常,直接使用如图方法,如json数据为单引号,则进行转义。

转换.png

1
2
3
4
5
6
7
8
9
10
11
12
13
    NSString *arrString = [jsonDic valueForKey:@"XXX"];

if ([arrString isKindOfClass:[NSString class]]) {
NSLog(@"NSString类");
}else if([arrString isKindOfClass:[NSArray class]]){
NSLog(@"NSArray类");
}

//如果是单引号加上这句
NSString *str3 = [arrString stringByReplacingOccurrencesOfString:@"'" withString:@"\""];

NSData *arrData = [str3 dataUsingEncoding:NSUTF8StringEncoding];//也可以试试NSASCIIStringEncoding
NSArray *array = [self toArrayOrNSDictionary:arrData];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#pragma mark -- 将JSON串转化为NSDictionary或NSArray
- (id)toArrayOrNSDictionary:(NSData *)jsonData{
NSError *error = nil;
id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingAllowFragments
error:&error];

if (jsonObject != nil && error == nil){
return jsonObject;
}else{
// 解析错误
return nil;
}
}
阅读全文 »

img

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
HashMapreMap =newHashMap();

try{

JSONObject jsonobject=newJSONObject(response);

Iterator i=jsonobject.keys();

while(i.hasNext()){

String key = (String) i.next();

String values=jsonobject.getString(key);

reMap.put(key,values);

}

}catch(JSONException e) {

e.printStackTrace();

}

阅读全文 »

问题:

存在这么一种情况:

我们要打包的android项目中已经引用了一个或多个第三方.jar文件。那么我们按上面的方法打成.jar文件,在引入到别的项目中使用中,

会发现出现错误:

NoClassDefFoundError

定位到错误代码位置,会发现生成.jar文件的原始android项目中引用的第三方.jar文件中的类找不到。

这里可以猜测,使用上述方法将android项目打成.jar文件的过程中,并没有将android项目原来引用的第三方.jar文件也一起打入到新的.jar文件中。

可以测试一下,将android项目打成的.jar文件解压缩,会发现只有java代码相关文件,而没有原来android项目中引用的第三方.jar文件

解决方案:

1、首先 问题产生的原因就是生成.jar文件的android项目原先引用的第三方.jar文件没有被打入到 新的.jar文件中

阅读全文 »

上一篇说到如何创建jar/aar,这篇介绍如何使用

一 jar的使用

jar包的使用很简单,直接将jar包拷如lib目录下

img

img

运行完之后我们试一下

img

使用成功。

二 aar包的使用

同样先导入libs目录下

阅读全文 »

Android studio下,有几种包可以放出去给别的项目调用,这里介绍jar和aar如何用as创建,可能有些简单,但确实有不会的,如有错误,请大牛指正。

一 jar包的创建

1.新建一个空白工程。

img

新建一个module文件

img

img

2.新建一个jar可使用的方法

img

img

阅读全文 »

相信大家总会碰到需要encode的时候,接着百度啊,然后发现stringByAddingPercentEscapesUsingEncoding这个方法,但是这个方法有时候无法对+等符号进行encode。那这时候咋办呢?

img

img

//encode

CF_EXPORT

CFStringRef CFURLCreateStringByAddingPercentEscapes(CFAllocatorRef allocator, CFStringRef originalString, CFStringRef charactersToLeaveUnescaped, CFStringRef legalURLCharactersToBeEscaped, CFStringEncoding encoding);

NSString encodedValue = (NSString)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(nil,(CFStringRef)value, nil,(CFStringRef)@”!*’();:@&=+$,/ %#[]”, kCFStringEncodingUTF8));

阅读全文 »

其实真机调试没那么难。。。又是证书又是什么的,最简单的方法,有网的情况下

img

OK了,就可以进行真机调试了

PS:如果运行时出现问题,建议将bitcode选择no运行试试

img

阅读全文 »

因为在AFNetworking中的请求结果采用block,是异步请求结果

那么如何返回结果呢?

答案很简单:代理。

例如:

img

img

代理在哪实现,结果在哪返回。

阅读全文 »