左边点或线控制竖直方向将哪部分拉伸
上边点或线控制水平方向将哪部分拉伸
下边点或线控制内容范围
右边点或线控制内容范围
iOS实用宏
宏
1 | __attribute__((unavailable("Invoke the designated initializer"))) |
用法
1 | @interface ZOCNewsViewController : UIViewController |
个人对restful api的一些理解
最近帮朋友做一个应用的api,采用restful api作为规范。
restful api的一些核心概念
restful api提倡把所有组件都视为资源,因此url中只应该是名词,不应出现动词。用get,post,put,patch,delete等动词对资源进行操作。如对于一个资源user,可以分别用上述动词对其进行增删改查操作。
那么,对于无法明显对应到增删改查范围内的操作如何处理呢?
对于login的处理
通常理解,login是user的操作。所以URI应该是这样的:/users/login。
但是注意restful提倡uri中不应该出现动词,因为uri中的内容都是资源。
那么login是对哪个资源进行操作的呢?又是进行增删改查中的哪个操作呢?
一般登录接口中会返回access_token及用户信息。考虑到login不是新增用户;也不是删;不是改,因为没有改变什么内容;也不是仅仅是查,因为还新增了access_token。那么我们无法将login简单的对应到增删改查中的任意一个操作。
从login所做的具体逻辑出发,login做了两个操作,一是验证用户是否合法,这属于业务逻辑,不做讨论;二是查用户信息,这属于查操作,操作的资源是User;三是增access_token,这又属于新增操作,操作的资源是token。那么login就对应了增删改查中的两个操作,两个资源。所以应该如何处理呢?
个人衡量下认为,应该将login作为增操作进行处理,即采用post方式进行请求。同时在请求中返回User信息。
既然这么处理,那么最合理的url应该是:/user/{userid}/token。但是考虑到实际情况中,/user/login是最易理解并被大家接受的,所以url我建议依然采用/user/login,同时动词依然采用post。
mantle的使用备忘
关于mantle的使用
mantle使用注意事项
数组transformer
1 | + (NSValueTransformer *)available_couponsJSONTransformer { |
字典transformer
1 | + (NSValueTransformer *)related_couponJSONTransformer { |
对象成员转换
必须继承MTLModel,声明MTLJsonAdapter,实现MTLJsonAdapter协议
nsnumber转nsstring
1 | + (NSValueTransformer *)course_typeJSONTransformer { |
安卓json解析库Gson的基本使用
安卓json解析库Gson的基本使用
安卓初学者,在使用gson库时碰到一些问题,特记录在此以备忘
基本用法
首先先讲一个比较简单点的例子(最简单的我就不讲啦,网上很多),帮助新手理解Gson的使用方法:
比如我们要解析一个下面这种的Json:
String json = {“a”:”100”,”b”:[{“b1”:”b_value1”,”b2”:”b_value2”},{“b1”:”b_value1”,”b2”:”b_value2”}],”c”:{“c1”:”c_value1”,”c2”:”c_value2”}}
首先我们需要定义一个序列化的Bean,这里采用内部类的形式,看起来会比较清晰一些:
1 | public class JsonBean { |
很多时候大家都是不知道这个Bean是该怎么定义,这里面需要注意几点:
1、内部嵌套的类必须是static的,要不然解析会出错;
2、类里面的属性名必须跟Json字段里面的Key是一模一样的;
3、内部嵌套的用[]括起来的部分是一个List,所以定义为 public List b,而只用{}嵌套的就定义为 public C c,
具体的大家对照Json字符串看看就明白了。1
2
3Gson gson = new Gson();
java.lang.reflect.Type type = new TypeToken<JsonBean>() {}.getType();
JsonBean jsonBean = gson.fromJson(json, type);
然后想拿数据就很简单啦,直接在jsonBean里面取就可以了!
如果需要解析的Json嵌套了很多层,同样可以可以定义一个嵌套很多层内部类的Bean,需要细心的对照Json字段来定义哦。
文章来源:http://www.cnblogs.com/jxgxy/p/3677256.html
字段与java关键字重名时候的处理
只要对该变量添加Field Naming Support就可以了。1
2
3
4public class BoxSubject {
@SerializedName("new")
private boolean new;
}
参考文章:http://www.jianshu.com/p/b23792d4ba31
Gson官方文档(详细,值得细读)
https://sites.google.com/site/gson/gson-user-guide#TOC-JSON-Field-Naming-Support
JSContext实现js注入
本文记录了iOS端实现js注入的基本方法。
webview内进行跳转后之前注入的js失效的问题
可以在下面函数中重新进行js注入:1
2
3
4- (void)webViewDidStartLoad:(UIWebView *)webView
{
[webView setupJSContext];
}
示例代码:
1 | @protocol MyPointExports <JSExport> |
1 | - (void)setupJSContext |
集成Reveal:不修改您的Xcode工程并加载Reveal
此方法仅适用于在iOS模拟器上运行的应用。
通过不修改Xcode工程文件来加载Reveal的方式,您可以检视任何一个您正在开发的iOS应用,而不需要对这些应用的工程做任何修改。另一个好处就是,您不需要再担心,犯下一不小心将Reveal库连接到应用中发布了的错误。
1. 打开您的iOS工程,选择 View → Navigators → Show Breakpoint Navigator。
2. 在面板左下角,点击 + 按钮并选择Add Symbolic Breakpoint。
3. 在 Symbol 输入区内输入 UIApplicationMain 。
4. 点击 Add Action 按钮, 确认 Action 被设置为 Debugger Command。
5. 将以下内容拷贝到 Action 的输入区内:
For iOS targets:
expr (Class)NSClassFromString(@”IBARevealLoader”) == nil ? (void )dlopen(“/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib”, 0x2) : ((void)0)
For tvOS targets:
expr (Class)NSClassFromString(@”IBARevealLoader”) == nil ? (void )dlopen(“/Applications/Reveal.app/Contents/SharedSupport/tvOS-Libraries/libReveal-tvOS.dylib”, 0x2) : ((void)0)
Note: If necessary, update the path to Reveal.app above to the correct location for your Mac.
6. 选中 Automatically continue after evaluating actions 选项。
7. 右击刚才新创建的断点,选择 Move Breakpoint To → User.
您可以像其他断点一样,禁用或启用此断点。用户级别断点在所有的Xcode工程中都可以使用。
8. 在iOS模拟器上构建并运行您的应用。
如果一切正常运行,请切换到Reveal应用,此时您的应用应会出现在应用选择器的下拉列表当中。选中您的应用,确认可以看到此时正在模拟器中运行的应用界面截图。
chmod的使用
常用命令:mkdir的使用
mkdir用来创建文件夹。如mkdir temp会在当前目录创建名为temp的文件夹。
虽然mkdir是个很常用的命令,我个人对它的参数却不熟悉,很少用到。因此写此文总结一下。
用法
mkdir [-pv] [-m mode] directory_name …
题外话:上面的中括号标识可选参数。-pv也是两个可选参数,不必同时出现。
参数解释
-p: 距离来说在创建a/b/c这样的目录时候,加入文件夹b不存在,默认情况是是会报错“mkdir: a/b: No such file or directory”的。但加入-p参数则能自动创建路径中不存在的文件夹并成功运行。
-v: 在文件夹成功创建后,给出文字提示。示例如下:
mkdir -v a
mkdir: created directory ‘a’
-m: 由于对chmod命令的使用还不熟悉,这部分解释待日后补充。
Set the file permission bits of the final created directory to the specified mode. The mode argument can be in any of the formats specified to the chmod(1) command. If a symbolic mode is specified, the operation characters “+” and “-“ are interpreted relative to an initial mode of ``a=rwx’’.
unity5整合admob实践
分为iOS和安卓两部分
公共部分
- 下载unity-admob插件,并引入unity工程。下载地址
- 下载unity-admob示例代码,将samples/HelloWorld/Assets路径下文件引入工程。下载地址
- 更换GoogleMobileAdsDemoScript内的广告id。
iOS
Enable Modules(C and Objectvie-C)设置为YES
使用“工程名.workspace”打开工程,如有需要则pod install,也可在谷歌直接下载admob依赖库,并引入工程。
安卓
Done