iOS---小经验分享

1.字符串在block中得赋值

  • 定义一个全局变量,《字符串》当这个字符串用copy修饰的时候,然后再在block中赋值,当在block块之外访问时,不能得到字符创的值。此时字符串应该设置为strong。
  • 在block中修改局部变量的值 此变量需要用__block修饰 1.字符串在block中得赋值
  • 定义一个全局变量,《字符串》当这个字符串用copy修饰的时候,然后再在block中赋值,当在block块之外访问时,不能得到字符串的值,此时的字符串可能已经被释放,解决办法字符串应该用strong修饰。
@interface ()
/** 字符串 */
@property (strong, nonatomic) NSString *string;
@end

 void (^test)(void) = ^ {
        self.string = @"string";
    };
 NSLog(@"%@",self.string);
  • 在block中修改局部变量的值 此变量需要用__block修饰
    __block NSString *str = nil;
    void (^test)(void) = ^ {
        str = @"string";
    };
   NSLog(@"%@",str);

2.xib--当一个视图是通过xib创建时,且使用自动布局--autolayout,那么当把xib,添加到其他视图中得时候,会得到意想不到的结果。

  • 解决办法:取消autoresizingMask

且通过xib创建的视图,self.view.bounds 不是屏幕那个尺寸

- (void)awakeFromNib
{
    self.autoresizingMask = UIViewAutoresizingNone;
}
  • 当控制器的view是通过xib或者stroyBoard加载的时候,那么把scrollView加到控制器的view上时,尺寸设置self.view.bounds;会被拉伸,若不被拉伸用以下语句
    scrollView.frame = self.view.bounds;
    scrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

3.集成通讯录UI,然后跳转到发短信界面

  • Remote compose controller timed out (NO)! On Opening MFMessageComposer
  • Meaning of Warning “while a presentation is in progress!”
  • 在带有UI的通讯录上然后选择联系人,让他跳转到发短信界面,不合理跳转会爆以上那两个警告。而且不会跳转到发短信界面
// 代理方法
#pragma mark - <ABPeoplePickerNavigationControllerDelegate>
/**
 *  当选择某一个联系人的时候就会执行该方法
 *
 *  @param person       每一个联系人就是一条记录
 */
- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person
{

    // 1.获取对应联系人的电话号码
    ABMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty);
    CFIndex phoneCount = ABMultiValueGetCount(phones);
    NSString *phoneValue;
    for (CFIndex i = 0; i < phoneCount; i++) {
        phoneValue = (__bridge NSString *)ABMultiValueCopyValueAtIndex(phones, i);
    }

    // 2.发短信
    dispatch_async(dispatch_get_main_queue(), ^{
         // 3.发短息
    // 3.1.显示发短息的控制器
    MFMessageComposeViewController *messageComposeVC = [[MFMessageComposeViewController alloc] init];
    // 3.2.设置内容
    messageComposeVC.body = self.msgString;

    // 3.3.设置代理
    messageComposeVC.messageComposeDelegate = self;

    // 3.4.设置收件人
    messageComposeVC.recipients = @[phoneValue];

    // 3.5.显示控制器
    [self presentViewController:messageComposeVC animated:NO completion:nil];

    });

    // 3.释放应该释放对象
    CFRelease(phones);
#warning 是否有内存泄露
    CFRelease((__bridge CFTypeRef)(phoneValue));
}
  • 首先这个通讯录VC是从self --modal出的控制器。当调用这个代理方法之后,通讯录VC就会销毁。,所以应该开个子线程在modal出发短信的控制器。

还待补充。。。。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java帮帮-微信公众号-技术文章全总结

Oracle应用实战八(完结)——存储过程、函数+对象曹组

游标 在写java程序中有结果集的概念,那么在pl/sql中也会用到多条记录,这时候我们就要用到游标,游标可以存储查询返回的多条数据。 游标可以理解为是PL/S...

37660
来自专栏lgp20151222

ResultSet相关ResultSetMetaData详细

DatabaseMetaData 有关整个数据库的信息:表名、表的索引、数据库产品的名称和版本、数据库支持的操作。 ResultSet 关于某个表的信息或一...

20320
来自专栏信安之路

SQL注入的常规思路及奇葩技巧

最近在看《SQL注入攻击与防御》这本书,看了之后感觉自己之前的视野和格局还是太小了些。SQLi的应用特别广泛,多种web数据库不说,移动安卓端也存在通用的SQL...

14600
来自专栏yukong的小专栏

【ssm个人博客项目实战04】mybatis实现博客类别的增删改查分页

在前面一节我们已经完成后台管理界面的一个实现,在这一节我完成其中的博客类别管理中如果分页显示博客类别信息。

19650
来自专栏芋道源码1024

数据库中间件 MyCAT源码分析——跨库两表Join

1. 概述 2. 主流程 3. ShareJoin 3.1 JoinParser 3.2 ShareJoin.processSQL(...) 3.3 Batc...

1.2K80
来自专栏Python

Django---ORM操作大全

前言 Django框架功能齐全自带数据库操作功能,本文主要介绍Django的ORM框架 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞:...

1.1K100
来自专栏北京马哥教育

10分钟学会理解和解决MySQL乱码问题

本文将详细介绍MySQL乱码的成因和具体的解决方案。在阅读本文之前,强烈建议对字符集编码概念还比较模糊的同学 阅读下博主之前对相关概念的一篇科普:十分钟搞清字符...

31780
来自专栏coder修行路

Go基础之--操作Mysql(二)

在上一篇文章中主要整理了Golang连接mysql以及一些基本的操作,并进行了大概介绍,这篇文章对增删查改进行详细的整理 读取数据 在上一篇文章中整理查询数据...

64960
来自专栏猿人谷

mybatis调用视图和存储过程

    现在的项目是以Mybatis作为O/R映射框架,确实好用,也非常方便项目的开发。MyBatis支持普通sql的查询、视图的查询、存储过程调用,是一种非常...

33550
来自专栏禹都一只猫博客

Python的flask:models.py来创建mysql数据库

1.4K90

扫码关注云+社区

领取腾讯云代金券