error包装 ios
2018-06-28 09:57:00 weixin_33866037 阅读数 21

Error 1:

[WARN]Warning: Multiple build commands for output file /Developer/xxx/xxx.xxx
or
Error: Multiple commands produce '/Users/xxx/Library/Developer/Xcode/DerivedData/xxx-azkpjshzmzhpaeaegtxmlgrewbpt/Build/Products/Debug-iphoneos/xxx.app/Info.plist':
1) Target 'xxx' has copy command from '/Users/xxx/Documents/xxx/SupportingFiles/Info.plist' to '/Users/xxx/Library/Developer/Xcode/DerivedData/xxx-azkpjshzmzhpaeaegtxmlgrewbpt/Build/Products/Debug-iphoneos/xxx.app/Info.plist'
2) Target 'xxx' has process command with input '/Users/xxx/Documents/xxx/SupportingFiles/Info.plist'

解决方法:

In the Project Navigator, select your Xcode Project file. This will show you the project settings as well as the targets in the project. Look in the "Copy Bundle Resources" Build Phase. You should find the offending files in that list twice. Delete the duplicate reference.
Xcode is complaining that you are trying to bundle the same file with your application two times. stack overflow

选中Target,选Build Phase,在Copy Bundle Resources中删除重复的文件,如果发现文件并没有重复,可以先把文件删除,clean一下,然后问题就解决了~ 后面也可以删除的文件在加回去。如果是重复文件的话就可以不用加回去了。

Error 2:

今天在使用cocoaPods的时候,发现报错了,如下:


293993-aa64a140c37409d3.png
1
293993-20b01e91e760a9fc.png
2
293993-752ef73d883c8eff.png
3
293993-75be1c8dcdb5ecde.png
4
293993-d5cd26defcdfe31d.png
5

解决办法:
照着后面给出的解决办法链接,就可以找到解决办法。是因为我刚刚创建的项目用的是Xcode9.4.1版本创建的,所以项目的Project Document下面的Project Format是Xcode 9.3-compatible,把这个设置改为9.3以下的就OK了~

首先选中当前项目文件

293993-74151b9401f188e4.png
解决1
293993-e521a68d7b4494fe.png
解决2

Error 3:

昨天看了一下博客,今天心血来潮想写个简单的macOS app,用Swift写,在pod一些框架的时候,首先是遇到了上面Error 2的错误,改正之后,就是下面的错误了。

 The “Swift Language Version” (SWIFT_VERSION) build setting must be set to a supported value for targets which use Swift. This setting can be set in the build settings editor.

解决办法:Project ► (Select Your Project Target) ► Build Settings ► (Type 'swift' in Searchbar) Swift Compiler Language ► Swift Language Version ► Click on Language list to open it.

Xcode 9 Swift Language Version (SWIFT_VERSION) - Stack Overflow

Error 4:

今天该死的和同事合并代码报错
_OBJC_IVAR_$_BDConversationCell._userNameLabel in: 某路径
该错误是一种链接错误,Xcode不会直接定位到问题具体位置。

但其仍有一定的规律,大概是以下原因:
1.检查是否误导入了问题中类的 .m 文件;
报错:

duplicate symbol _OBJC_IVAR_$_TestViewController._button in: /Users/Kingdev/Library/Developer/Xcode/DerivedData/测试OC-eluxicnvoptnsgcghlsslvbpkzzm/Build/Intermediates/测试OC.build/Debug-iphonesimulator/测试OC.build/Objects-normal/x86_64/ViewController.o /Users/Kingdev/Library/Developer/Xcode/DerivedData/测试OC-eluxicnvoptnsgcghlsslvbpkzzm/Build/Intermediates/测试OC.build/Debug-iphonesimulator/测试OC.build/Objects-normal/x86_64/TestViewController.o
ld: 3 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

原因:

293993-74261e6e36c63ec5.png
image

2.项目中是否存在同名的文件 [①多人协作开发导致project文件合并冲突 ②自己文件与三方中文件重名了]

报错:

ld: 3 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

原因:

293993-be33d7e3fef6ecf9.png
image

若在项目中搜索中搜索发现,不存在同名的文件,就可判断出不是问题2。基本上就是问题3了。
3.在 TARGETS ——> Build Phases ——> Compiles Sources,看看出现问题的类是不是有重复的或路径出现了问题。多人协作开发时就容易出现这种问题,project文件冲突导致的。

解决:直接搜索出现错误的文件名,会发现有两个这个m文件,直接删除一个即可。

duplicate symbol _OBJC_IVAR

慢慢来,一步一个巴掌印~~~

持续更新。。。。

iOS Error
2018-11-28 11:08:00 weixin_34289454 阅读数 6

离开页面后,网络请求使用 delegate 回调崩溃

原因:用的是 assgin 修饰 delegate,像数值类型一样 delegate对象被销毁了但不置 nil。

解决方案:

  • 使用weak修饰delegate对象,离开页面后,delegate对像销毁并置 nil。
  • 离开页面时,手动将delegate对象置nil。
  • 离开页面时,取消这个网络请求。

This application is modifying the autolayout engin from a background thread

原因:未回主线程刷新UI

解决方案:

dispatch_async(dispatch_get_main_queue(), ^{
    // 有关UI的操作
});
2016-03-17 14:17:00 weixin_34162401 阅读数 15

本文首发地址
当一个傻逼的产品经理提出,在滑到表格的最底部的时候,需要模态界面弹出,并且还要有一个同样的导航栏展示。这个时候有心脏病的人可能就要注意了。
正常的时候都是上拉加载下拉刷新,没错吧?
我们的产品经理就是在反人类啊。说你尼金三胖!!

1:实现过程

当程序模态跳转的时候,需要对跳转的控制器手动包装一个navigationcontroller

2:上代码

AllTicketDataViewController * allTicketVC = [[AllTicketDataViewController alloc] init];
   // 包装一个导航栏控制器
 YSNavigatViewController * nav = [[YSNavigatViewController alloc]   initWithRootViewController:allTicketVC];
  [self presentViewController:nav animated:YES completion:nil];

如有问题可添加我的QQ:1290925041
还可添加QQ群:234812704(洲洲哥学院)
欢迎各位一块学习,提高逼格!
也可以添加洲洲哥的微信公众号
洲洲哥对于在表格拉倒底部改加载数据的时候突然的去模态从下往上弹出一个VC,我无语了

更多干货,请扫描OsJoin二维码,不定期推送哦


1416781-3bbb26fe3d7cda9b.jpg
洲洲哥的OSjoin.jpg
2016-03-17 14:12:17 whuizhou 阅读数 2147

   

本文地址来源:http://www.osjoin.com/ios/13.html

当一个傻逼的产品经理提出,在滑到表格的最底部的时候,需要模态界面弹出,并且还要有一个同样的导航栏展示。这个时候有心脏病的人可能就要注意了。

正常的时候都是上拉加载下拉刷新,没错吧?

我们的产品经理就是在反人类啊。说你尼金三胖!!


1:实现过程

当程序模态跳转的时候,需要对跳转的控制器手动包装一个navigationcontroller


2:上代码

AllTicketDataViewController * allTicketVC = [[AllTicketDataViewController alloc] init];
   // 包装一个导航栏控制器
 YSNavigatViewController * nav = [[YSNavigatViewController alloc]   initWithRootViewController:allTicketVC];
  [self presentViewController:nav animated:YES completion:nil];

洲洲哥对于在表格拉倒底部改加载数据的时候突然的去模态从下往上弹出一个VC,我无语了



更多干货,请扫描二维码,不定期推送哦



2018-10-24 20:33:00 weixin_33994444 阅读数 4

1、iOS 的基础数据类型及其包装类型:

1.1、iOS 的基础数据类型

int、float、double、long、char、NSInteger、NSUInteger、CGFloat、BOOL等

在 64 位平台和类似于 64 位平台的各种平台上,NSInteger-> long, NSUInteger-> unsigned long, CGFloat-> double.

1.2、iOS 的基础数据类型与包装类型的转换

由于只有对象类型才能放入数组、字典中,所以需要将基本数据类型转换成包装类型,OC 中提供的包装类是 NSNumber,NSValue。其中NSNumber 继承于 NSValue。NSNumber 主要针对于基本数据类型的包装,NSValue 主要针对结构体进行包装。

1.2.1 基础数据类型 -> 包装类型

NSNumber:

方式一:

7179440-e0a2accbb6e8275b.png
NSNumber 提供的方法

举例:NSNumber *number = [NSNumber numberWithBool:YES];

方式二:

直接在前面加@,例如:@2 

NSNumber *number = @2; 

NSValue:

  CGPoint point = CGPointMake(20, 20);// 创建点坐标结构体

7179440-a0750c46f501a3cb.png
CGPoint 结构

  NSValue *pointValue = [NSValue valueWithPoint:point]; // 将结构体转换成为NSValue对象

1.2.2 包装类型 -> 基础数据类型

NSNumber:

7179440-f9e8c1810fda8219.png
NSNumber 的属性

举例:

NSNumber *number = [NSNumber numberWithBool:YES];

BOOL*b = [number boolValue];// BOOL*b = number.boolValue;

NSValue:

   NSArray *array = @[pointValue]; // 将NSValue对象存放到数组中

   NSValue *value = array[0];  // 从数组中取出pointValue对象

   CGPoint point2 = [value pointValue]; // 将NSValue对象转换成为结构体

1.2.3 各种类型转换为 NSString

7179440-5754b9cb6d2642a1.png

数组 与 NSString 互转

1)数组 -> 字符串

NSString *str = [array componentsJoinedByString:@"#"];//#为分隔符1

输入:[str,kkk,jjj]

输出:str#kkk#jjj

2)字符串 -> 数组

NSArray *array = [str componentsSeparatedByString:@"#"];//#为分隔符1

输入: str#kkk#jjj

输出: [str,kkk,jjj]

字典 与 NSString 互转

1)字符串 -> 字典

NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];

NSError *err;

NSDictionary *dic = [NSJSONSerialization JSONObjectWithData: jsonData  options: NSJSONReadingMutableContainers error:&err];

2)字典 -> 字符串

NSError *parseError = nil;

NSData *jsonData = [NSJSONSerialization dataWithJSONObject: dic options: NSJSONWritingPrettyPrinted error:&parseError];

NSString *str = [[NSString alloc] initWithData: jsonData encoding: NSUTF8StringEncoding];

2、对象类型

对象类型指的是就是 NSObject 类以及它的子类的对象(类或协议所声明的指针类型)。例如:

NSAutoreleasePool *pool ,其中,NSAutoreleasePool 是一个类,NSAutoreleasePool *是它指针类型 或叫 对象类型。

id类型可以表示任何类型,一般只是表示对象类型,不表示基本数据类型,所以刚才的变量可以声明 pool 也可以声明为 id pool。

2.1 基础数据类型与对象类型的差别是什么

1、是否需要内存管理

只有 OC 对象类型需要进行内存管理;非对象类型如基本数据类型不需要进行内存管理。

由于在内存中的存放机制不同:

iOS 中的基本数据类型,如 int、float、struct 等类型的局部变量都是存放在栈区。对于栈来讲,是由系统编译器自动管理,不需要程序员手动管理。

注:

1、static修饰的全局变量作用范围为定义变量的文件,变量存储在静态区,生命周期与程序生命一致;

2、extern只能声明变量,使作用范围扩大到整个程序文件,存储在静态区,生命周期与程序生命一致;

而对象类型在内存中是以堆的方式分配空间的,并且堆内存是由程序员自己释放的,就是 release

7179440-bdbb23a8287d7f7a.png
对象类型和非对象类型在内存中的形式

3、引用传递与值传递的区别

简单说,

值传递相当于 copy 了一份,如 NSMutableArray *array = @[@"Yifeng", @"Ma"];

NSMutableArray *arrayCopy = [array copy];

那么对 arrayCopy 进行任何操作(插入,删除,替换等)对于原数组没有任何影响;

引用传递是将 array 这个指向内存的指针 copy 了一份,后续的任何操作都会改变数组内容。


7179440-5b6a349c7da5f180.png
值传递与引用传递

参考文档:

OC 基本数据类型与对象之间的转换方法

iOS数据类型

iOS 堆和栈的区别? - 简书

IOS error 汇总

阅读数 347

ios ERROR ITMS-90189

阅读数 2317

iOS Error汇总

阅读数 1482

iOS 常见的 error

阅读数 9

没有更多推荐了,返回首页