Logdown是个很不错的博客平台,但考虑后面会有一些互动性的,如html5,js交互方面的东西要展现,所以决定移至github,采用Hexo搭建,地址:
http://dabing1022.github.io/
该博客不再维护。
Logdown是个很不错的博客平台,但考虑后面会有一些互动性的,如html5,js交互方面的东西要展现,所以决定移至github,采用Hexo搭建,地址:
该博客不再维护。
年度最佳纪录片,程序员最爱The Internet's Own Boy,讲述Aaron Swartz创建RSS、Markdown、Reddit、Creative Commons、web.py的传奇一生,请花点时间学习这种信仰与追求。
在心城的开发过程中,在处理音频部分时,有这么段代码
NSError* error;
self.audioRecorder = [[AVAudioRecorder alloc] initWithURL:[self getTempAudioPath] settings:settingDic error:&error];;
//...
if ([self.audioRecorder prepareToRecord]) {
[self.audioRecorder record];
}
在模拟器上崩溃,始终停在了prepareToRecord
这一行,但真机测试没问题。怀疑是模拟器的bug。
Stackoverflow问题讨论
在测试音频录制功能时,先暂时禁用掉Xcode的全局断点功能。之后,恢复正常开启全局断点。(默认快捷键:Command+Y)
在接触到开源项目 Masonry 后,里面的布局约束的链式写法让我颇感兴趣,就像下面这样
UIEdgeInsets padding = UIEdgeInsetsMake(10, 10, 10, 10);
[view1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(superview.mas_top).with.offset(padding.top); //with is an optional semantic filler
make.left.equalTo(superview.mas_left).with.offset(padding.left);
make.bottom.equalTo(superview.mas_bottom).with.offset(-padding.bottom);
make.right.equalTo(superview.mas_right).with.offset(-padding.right);
}];
其他语言比如 Lua, 实现链式语法很容易。但在 Objective-C 中,如何实现链式语法呢?
注:这里讨论的链式语法特指的是点链式语法,不同于中括号链式语法,如
[[[[someObj method1] method2] method3] method4:someParam]
。中括号链式语法相对而言更简单些,每个方法的返回值是下一个方法的发送者即可。
查看 Masonry 源码,起初没看明白,于是搜索了下 Stackoverflow,没有发现类似的问题,便将这个问题发布在了 Stackoverflow 上。这里是地址。
总结了下,贴下代码,做个说明。
@class ClassB;
@interface ClassA : NSObject
// 1. 定义一些 block 属性
@property(nonatomic, readonly) ClassA *(^aaa)(BOOL enable);
@property(nonatomic, readonly) ClassA *(^bbb)(NSString* str);
@property(nonatomic, readonly) ClassB *(^ccc)(NSString* str);
@implement ClassA
// 2. 实现这些 block 方法,block 返回值类型很关键,影响着下一个链式
- (ClassA *(^)(BOOL))aaa
{
return ^(BOOL enable) {
//code
if (enable) {
NSLog(@"ClassA yes");
} else {
NSLog(@"ClassA no");
}
return self;
}
}
- (ClassA *(^)(NSString *))bbb
{
return ^(NSString *str)) {
//code
NSLog(@"%@", str);
return self;
}
}
// 这里返回了ClassB的一个实例,于是后面就可以继续链式 ClassB 的 block 方法
// 见下面例子 .ccc(@"Objective-C").ddd(NO)
- (ClassB * (^)(NSString *))ccc
{
return ^(NSString *str) {
//code
NSLog(@"%@", str);
ClassB* b = [[ClassB alloc] initWithString:ccc];
return b;
}
}
//------------------------------------------
@interface ClassB : NSObject
@property(nonatomic, readonly) ClassB *(^ddd)(BOOL enable);
- (id)initWithString:(NSString *)str;
@implement ClassB
- (ClassB *(^)(BOOL))ddd
{
return ^(BOOL enable) {
//code
if (enable) {
NSLog(@"ClassB yes");
} else {
NSLog(@"ClassB no");
}
return self;
}
}
// 最后我们可以这样做
id a = [ClassA new];
a.aaa(YES).bbb(@"HelloWorld!").ccc(@"Objective-C").ddd(NO)
《心城》1.3.0版本目前可以在AppStore下载。
迭代的这几个版本,还没有正式迈入到我们设想的功能点。
在下面的1.4.0版本中,我们俩决定按照之前设想的,加入标签系统,这套系统会成为组织数据的一个核心,今天上午我自己出了个概念图,不过当务之急要将功能、流程走通。
我们在用 Cocoapods 做第三方开源库管理的时候,有时候发现
$ pod search XXX
版本低于github上仓库的最新release版本 (注:XXX为仓库名称)
查看当前系统Cocoapods版本命令:pod --version
$ sudo gem update --system
$ gem sources --remove https://rubygems.org/
$ gem sources -a http://ruby.taobao.org/
$ sudo gem install cocoapods
$ pod setup
其中
$ gem sources --remove https://rubygems.org/
$ gem sources -a http://ruby.taobao.org/
这两句话可以省略,但我们在天朝,还是加上的好。国内网络原因(你懂的),如果使用原来的https://rubygems.org/
,那么在sudo gem install cocoapods
的时候,存放在 Amazon S3 上面的资源文件间歇性连接失败。
升级结束后再次pod --version
,会发现 Cocoapods 版本号高于之前的版本,升级成功了。
再次
$ pod search XXX
OK,github仓库的最新版已经有了。