Archive for April, 2015

作者:AngryFox 分类: Uncategorized April 29th, 2015 暂无评论

【问题1】:2015/04/29 22:15:22 [crit] 15152#0: *20 connect() to unix:/tmp/php-cgi.sock failed (13: Permission denied) while connecting to upstream, client: 121.12.109.89, server: 12.ofwho.com, request: “GET

今天把vps上php5.3升级到了php5.4,我采用的是nginx+php-fpm的架构,nginx通过php-fpm的socks文件来连接。
结果报错: connect() to unix:/tmp/php-cgi.sock failed (13: Permission denied) while connecting to upstream
我检查了一下 /tmp/php-cgi.sock 发现该文件拥有者是root,而nginx和php-fpm都是www用户来运行的,按理讲,这个sock文件也应该是www才对。

【问题2】:编译安装PHP出错configure: error: GD build test failed.
重新下载安装gd-2.0.33,解决,下载地址:http://down1.chinaunix.net/distfiles/gd-2.0.33.tar.gz

怀疑是编译系统可能存在问题,故重新通过yum安装了gcc等后,重新编译就可以了,诡异啊!
yum install gcc* -y

作者:AngryFox 分类: Uncategorized April 17th, 2015 暂无评论

capturing self strongly in this block is likely to lead to a retain cycle

BSXPCMessage received error for message: Connection interrupted

-[__NSCFNumber length]: unrecognized selector sent to instance 0x8b3c310
将模型属性中的comments改为NSNumber类型,掉用的时候做一下数据转换
设置属性类型为NSNumber
调用时做下数据类型转换,转成NSString即可

解析pilst文件中的字段的 comments数据类型为NSNumber类型,而在字典转模型时写成了NSString类型,所以报了以上错误

-[NSCFType buttonClicked:]: unrecognized selector sent to instance 0x44e1e0′
这时候对于初学者来说这是莫名其妙,反复检查都是没有问题,但是就是会crash。
解决方法如下:
问题的原因就是声明MainView controller的时候出现问题。把MainView声明成立局部变量,
导致MainView中的action不能正确识别本身的ViewController
改正很简单:
MainView 定义在Application的.h文件中就可以了。
当然还有有很多其它情况出现类似的错误,原因基本都是由于viewController继承错误的导致的。

popViewControllerAnimated后,进入的viewcontroller不能即时刷新。
这时它不执行viewDidLoad,但执行viewWillAppear:(BOOL),所以只要把刷新逻辑写到viewWillAppear:(BOOL)里就OK了。
但要注意当有刷新label这样的view里,它的backgroundColor最好不要是clearColor,否则label上的字会出现重影。

Capturing ‘self’ strongly in this block is likely to lead to a retain cycle
_player.completionBlock = ^{
[self stopPlay];
};

上面在block里用self是会有提示:
Capturing ‘self’ strongly in this block is likely to lead to a retain cycle

可以这样改一下
__weak typeof(self) weakSelf = self;
_player.completionBlock = ^{
[weakSelf stopPlay];
};

-fno-objc-arc -Wl -no_pie
去掉CFLAGS中的-mdynamic-no-pic后重新编译工程即可将警告去除:
targets–>build Settings–>Linking–>Don’t create Position Independent Executables 设置为YES【默认为No】警告自然消除

你把self转换一下加上block字段之后就不会被retain了

__block ViewController *controller = self;
[_tableView setPullToRefreshHandler:^{
[controller dataDidRefresh:nil];
}];

在ARC下不用__block 而是用 __weak 为了避免出现循环引用

block里面不能使用自己自定义的属性,因为block是独立的

作者:AngryFox 分类: Uncategorized April 7th, 2015 暂无评论

NSDictionary常用功能

[/c](1) 初始化字典
NSDictionary *dic=[NSDictionary dictionaryWithObject:@"hechen" forKey:@"name"];
NSDictionary *dic1=[NSDictionary dictionaryWithObjectsAndKeys:@"hechen",@"name",@"25",@"age", nil];
NSDictionary *dic2=[[NSDictionary alloc] init];

NSLog(@"%d",[dic count]);
NSLog(@"%d",[dic1 count]);
NSLog(@"%d",[dic2 count]);

三种方式来初始化字典对象:
1. [[NSDictionary alloc] init] 方法最为常见了,先给NSDictionary分配空间再初始化;
2. 使用dictionaryWithObject forkey 该方法在初始化的时候提供了两个参数,第一个为存储的值,第二个为key,这里的key是放在后面的。
3. 使用dictionaryWithObjectsAndKeys 这个方法同样用于初始化NSDictionary,这里可以传入多个值,奇数为value值,偶数为key值,但是必须以nil形式结尾。这个和之前的NSArray,NSSet一致,标识集合的结束。

(2)获得NSDictionary中Keys的迭代

NSEnumerator *enumer=[dic1 keyEnumerator];
        NSString *key2=[enumer nextObject];
        while(key2!=nil){
            NSLog(@"输出Key=%@",key2);
            key2=[enumer nextObject];
        }
用keyEnumerator 方法获取NSDictionary Key的集合迭代,然后使用迭代器遍历输出所有的元素。

(3)获取NSDictionary中的Values的迭代
NSEnumerator *enumerObject=[dic1 objectEnumerator];
        for(NSObject *object in enumerObject){
            NSLog(@"输出Value = %@",object);
        }
(4)根据Key获取Value

NSString *va=[dic1 objectForKey:@"name"];
        NSLog(@"objectForKey = %@",va);

NSMutableDictionary 动态字典

(1) dictionaryWithCapacity方法设置其初始容量

NSMutableDictionary *muDic1=[NSMutableDictionary dictionaryWithCapacity:10];
初始化了一个NSMutableDictionary对象,并且设置其初始容量为10; 和NSMutableArray,NSMutableSet一样,当存储的元素达到最大容量之后会自动扩充容量
(2) 往NSMutableDictionary中添加元素

[muDic1 setObject:@"中国" forKey:@"name"];
        [muDic1 setObject:@"area" forKey:@"add"];
        NSEnumerator *enumerKeys=[muDic1 keyEnumerator];
        for(NSString *key in enumerKeys){
            NSString *value=[muDic1 objectForKey:key];
            NSLog(@"输出的值 = %@",value);
        }

(3) 删除字典中的元素

[muDic1 removeObjectForKey:@"add"];
        for(NSString *key in [muDic1 keyEnumerator]){
            NSLog(@"-----%@",[muDic1 objectForKey:key]);
        }
- (void)removeObjectsForKeys:(NSArray *)keyArray;这个方法参数为一个数组,用于删除数组中包含的key的所有元素。

[muDic1 removeObjectsForKeys:[NSArray arrayWithObjects:@"ab", nil]];
[muDic1 removeAllObjects];
for(NSString *key in [muDic1 keyEnumerator]){
    NSLog(@"*********%@",[muDic1 objectForKey:key]);
}1
作者:AngryFox 分类: Uncategorized April 2nd, 2015 暂无评论

如果你使用网上的开源库的话,应该会遇到的问题,最初用ASIHttpRequest,发现带ARC模式下需要修改的地方太多,并且仍旧会出Core。
查到一些方法是使用编译Framework的方式,不过太麻烦。其实有个简单的方式在某些文件中禁用ARC。
TARGETS的build Phases中的Compile Source里修改文件备注
文件参数设定:

增加-fobjc-arc来使单个文件 支持ARC,或者添加-fno-objc-arc使单个文件不支持ARC。