`
文章列表
苹果企业版证书,虽然不能上app store,但是可以实现在网页上直接点击下载,而且不需要知道设备的UDID,合理使用的话还是很方便的。昨天用这种方式发布成功了,本文总结一下步骤 首先,在xcode中export的时候,可以看到有3个 ...
sqlite不支持alter table的时候修改某列的定义,所以如果需要改变某一列,思路是: 1、先建一张临时表,把原来表中的数据复制进去 2、删除旧表 3、新增表 4、从临时表中把数据复制回新表 5、删除临时表 NSString *sql1 = @"create table tb_users_temp as select * from tb_users"; NSString *sql2 = @"drop table tb_users;"; NSString *sql3 = @"CREATE TABLE IF NOT EXISTS ...
公司系统做了一年多,慢慢也有点规模了。从最初只有一个APP + 一个server的模式,到现在有多个子系统,多个客户端。这个过程中,积累了一些想法,本文简单总结一下 系统拆分的好处 基本上,比较小的系统,单进程集中部署就可以了。集中部署不代表一定不好,在系统规模很小的时候,或许是最适合的,因为调用关系简单,开发也比较容易。但是系统慢慢变大了以后,我认为拆分系统,分布式部署就变得更为合理了。 拆分系统至少有这些我体会到的好处: 1、停掉系统的一个部分,只会影响相关业务,不会造成整体业务中断。特别是一个新的模块上线,尚未稳定的时候,可能会有错误挂掉,或者主动重启维护等,如果是集中部署,就会造 ...
产品此前的数据备份方案,存在不少问题,所以需要设计一个新的方案。本文总结一下新旧方案的优劣 首先APP是一个支持离线的应用。本地数据保存在sqlite,在离线环境下,在本地数据库里读写记录,在有网络的时候,再将数据备份到服务器;同时,也可以随时将数据从服务器恢复到本地 旧方案 此前的备份方案是基于内容的,每一条记录都有create_date和modify_date字段,同时APP保存有latest_backup_date(上次备份时间)。然后开始备份的时候,就对所有表进行扫描,根据这3个时间的对比,直接生成sql语句,发到服务器执行,写入服务端的mysql数据库;收到服务器的成功响应之后, ...
我们的APP从启动到进入主页面,是通过presentViewController构造了一个ViewController序列,类似于首页 -> 登陆页 -> 启动加载页 -> 主页面 其中,在启动加载页的viewDidAppear方法里做了很多逻辑处理: -(void) viewDidAppear:(BOOL)animated{ ...
接上篇博客: hybrid应用的database locked问题 我们的是hybrid应用,基于cordova。做第一个版本的时候没经验,原生的部分用FMDB访问数据库,WEB的部分就直接找了一个SQLitePlugin用。早期的时候,原生代码和js访问数据库都是错开的,所以没有发生问题。但是到了现在,有些场景需要2边一起访问数据库,由于sqlite不支持并发写,就产生了database locked问题 其实回头看,如果在首版本就基于FMDB自己写一个cordova插件提供给js调用是很容易的,但是到了现在再改造就麻烦了很多,因为业务代码已经大量调用了SQLitePlugin的js接口 ...
SQLite是库级锁,支持并发读,但是不支持并发写。所以如果多个线程同时进行写操作,就有可能造成database locked问题。如果是纯原生应用,这篇文章介绍了怎么利用FMDatabaseQueue避免锁库: 使用FMDatabaseQueue避免database locked问题 但 ...
今天发现一段代码,发生了奇怪的回调混乱现象 调用的API是这样的: api.method = function(sql, condition, successCallback, failureCallback){ // logic } 我们自己的业务代码调用了这个函数: var sql = "insert into xxxx"; var condition = {}; api.method(sql, condition, function(result){ // callback when success }, function(err ...
在微信里,其实可以改变“分享到朋友圈”和“转发给好友”的默认行为。这些js接口,截止到今天(安卓版微信6.0)还是不公开的,微信的官方文档里完全没有提到,但是其实借助WeixinJSBridge是可以做到的 分享行为 可以控制 ...
业务模式 由于微信的火爆,出现了很多提供公众号二次开发的平台公司。主要的业务都是为客户的公众号做二次开发,提供诸如微门户,微商城这样的服务。一般都是客户在平台上申请一个唯一的业务ID,然后将自己的公众号绑 ...
今天调一个页面,碰巧开着console,偶然发现发起了无效的http请求,提示404错误 虽然不影响功能,还是检查了一下,发现是因为有类似下面的代码: <img src="{{item.imgPath}}" alt=""/> 所以,在angular实际渲染完成之前,浏览器读到img标签,就向{{item.imgPath}}这个地址发起了请求,结果当然是404。实际上应该使用: <img ng-src="{{item.imgPath}}" alt=""/> 就会有延迟加载的效果 ...
我们的一个APP使用了crashlytics,一般如果APP crash了,都会收到邮件通知,定位问题比较方便。可是最近有几次用户打电话告诉我们应用闪退了,我们却没有收到crashlytics发来的邮件。 通过debug,我们发现应用有一个BUG会导致内存溢出,当内存耗尽的时候,在xcode上就能看到一个错误信息,提示内存不足;而没有连接xcode直接运行的时候,结果就是应用闪退。而且这种情况下crashlytics似乎是无法捕获异常的,或者是没有资源把crash上报。所以就会出现这种现象,用户打电话反馈闪退,而我们没有收到crash通知邮件。 所以,如果明明应用闪退了,却收不到通知,就要考 ...
效果图: 上面卡片形状的区域,height是不固定的。因为width是根据屏幕的宽度自适应的,然后height和width保持固定比例。所以在PC上,height可能是300px,但是在手机上就只有100px。 希望中间的剩余金额保持垂直居中显示,方法有很多,我用的是绝对定位 + 百分比的方法。关键CSS如下: <div id="parent"> <div>季度卡 vip86900006</div> <div id="son">3次</div> </div&g ...
效果: 主要就是在父容器上设置水平方向滚动,并禁止换行。然后子元素用inline-block实现平铺。关键CSS如下: <ul> <li></li> <li></li> <li></li> </ul> ul { width: 100%; overflow: scroll; white-space: nowrap; } li { display: inline-block; width: 50%; vertical- ...
<div>xxxxxxxx</div> 通过以下css,可以令div中的超长的字符变成省略号 div { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
Global site tag (gtag.js) - Google Analytics