101. 컴파일 오류: ld: -lPods에 대한 라이브러리를 찾을 수 없습니다
이 오류는 프로젝트에서 cocoaPods를 사용할 때(보통 릴리스 중에) 발생합니다.
Pod 설치 후 cocoaPods가 새 작업 공간을 생성하기 때문입니다. 프로젝트를 닫았다가 다시 열어야 합니다. 문제가 해결되었습니다.
102. iOS 시간은 왜 항상 실제 시간보다 8시간 느린가요?
예를 들어 베이징 시간 "2014-4-4 22:00"(문자열)을 NSDate로 변환해야 합니다. 문자열을 NSDate로 변환하는 것은 일반적으로 NSDateFormatter를 통해 수행됩니다. iOS에서는 NSDate가 GMT 시간으로 저장되므로 NSDateFormatter는 문자열의 현재 시간대의 현지 시간을 자동으로 처리합니다. 즉, 변환된 베이징 시간(문자열 "2014-4-4 22:00")을 GMT로 변환합니다. 시간(" 2014-4-4 14:00"). 이 NSDate(longlong, 1970년 이후의 초 또는 밀리초 수)를 서버에 직접 전달하면 서버는 이 시간을 베이징 시간(실제로는 GMT 시간)으로 사용하므로 8시간의 시차가 발생합니다.
올바른 접근 방식은 이 NSDate를 기반으로 시차를 추가하는 것입니다. 시차를 계산하려면 현재 시간대를 알아야 합니다. [NSTimeZonesystemTimeZone]은 현재 시간대(동부 8개 구역)를 가져온 다음 secondFromGMTForDate: 메서드를 사용하여 이 시간대(동부 8개 구역)의 시차(초)를 가져올 수 있습니다. 코드는 다음과 같습니다.
NSDateFormatter* df=[NSDateFormatter new]; // [dfsetLocale:[NSLocale currentLocale]]; df.dateFormat=@"yyyy-MM-dd HH:mm"; NSDate* date=[dfdateFromString:@"2014-4-4 22:00"]; NSTimeZone *zone =[NSTimeZone systemTimeZone]; NSInteger interval = [zonesecondsFromGMTForDate: date]; NSDate *localeDate =[date dateByAddingTimeInterval:interval]; NSLog(@"%@",localeDate);
103. UITableViewController에서 키보드 팝업 애니메이션을 비활성화합니다.
TableViewController에는 셀의 입력 컨트롤이 팝업될 때 키보드 팝업 애니메이션이 내장되어 있습니다. 소프트 키보드를 위로 올리면 tableView가 자동으로 위로 스크롤됩니다. 하지만 이 기능은 때때로 입력 컨트롤이 보이지 않는 곳으로 스크롤되기 때문에 큰 문제를 일으킬 수 있습니다. 프레임워크 코드를 수정할 수 없으므로 이 경우 TableViewController(하위 클래스화) 사용을 포기하고 대신 일반 UIViewController+UITableView를 사용해야 합니다. 그러나 때로는 TableViewContrller를 사용해야 할 때도 있습니다. 예를 들어 정적 셀을 사용하려는 경우 다음 방법을 통해 문제를 해결할 수 있습니다. 상위 클래스의 viewWillAppear 동작을 비활성화하려면 UITableViewController 하위 클래스의 viewWillAppear 메서드를 재정의하세요. 즉, [superviewWillAppear:animated]:
-(void)viewWillAppear:(BOOL)animated{ // Override super method with don'tcall [super viewWillApper] }
104를 호출하지 마십시오. 언제 NSCache를 사용해야 합니까?
NSCache는 메모리 부족에 따라 캐시 개체 중 하나를 자동으로 해제합니다(예: 뷰가 파괴되었거나 캐시된 개체가 너무 많습니다). 따라서 NSCache에 의해 캐시된 객체는 필요할 때 네트워크에서 다운로드할 수 있는 데이터와 같이 재구축 가능해야 합니다. 그렇지 않으면 NSCache를 사용하면 안 됩니다. 개체는 어느 시점에서 파괴될 것입니다.
따라서 NSCache를 사용할 때 검색된 객체가 캐시에 없으면 주의해야 합니다.
-(CachedObject)getCachedObject:(id)key{ id* obj=[NSCacheObjectobjectForKey:key]; if (cb==nil) { obj=[[CachedObjectalloc]init]; // Recreate cached object …… } return obj; }
105. >문제 설명:
디버깅할 때 다음 오류가 발생합니다(디버깅할 때는 정상일 수 있음):
ld: -lPods에 대한 라이브러리를 찾을 수 없습니다
문제는 Xcode5.x가 이제 종속 아키텍처를 감지한다는 것입니다. 프로젝트 및 해당 설정은 기본 프로젝트와 일치해야 합니다. 그렇지 않으면 종속 프로젝트가 거부됩니다(즉, 컴파일되지 않습니다).
해결책:
Pod 프로젝트의 모든 대상에서 기본 프로젝트와 일치하도록 아키텍처를 설정합니다.
106. 정적 라이브러리가 지원하는 아키텍처를 확인하는 방법
"lipo -info static library file" 명령을 사용하세요. 예:
lipo -info Unrar4iOS
그러면 터미널에 다음과 같이 표시됩니다. :
Fat 파일의 아키텍처: Unrar4iOS는 armv7 armv6 i386
107입니다. 특정 정적 라이브러리를 프로젝트에 도입하면 아카이브에서 "Undefound Symbols for Architecture armv7s/arm64" 오류가 발생합니다.
질문 105에서 언급한 바와 같이 . 105번 문제의 솔루션을 사용하는 것 외에도 또 다른 해결 방법이 있습니다.
먼저 정적 라이브러리의 아키텍처를 확인하세요(질문 106 참조). 그런 다음 정적 라이브러리의 아키텍처를 지원하도록 구성표를 수정합니다. 그런 다음 Buid 설정에서 Build Active ArchitectureOnly를 수정하고(선택한 아키텍처에 대해서만 컴파일) 값을 예로 변경합니다. 그런 다음 컴파일하십시오.
108. Autolayout에서 UITableView의 높이가 올바르지 않습니다.
Autolayout에서 탐색 모음이 있는 경우 뷰의 UITableView가 제약 조건에 의해 제한되고 탐색 없는 높이에 대한 제약으로 런타임 높이가 재설정됩니다. 술집. 이때 제약조건의 영향을 제거하기 위해 viewDidLayoutSubviews 메소드를 구현해야 합니다:
- (void)viewDidLayoutSubviews { _table.frame=CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height); }109. 기본 복귀 버튼 제목은 어떻게 수정하나요?
탐색이 A 뷰 -->B 뷰라고 가정합니다.
뷰 B의 돌아가기 버튼 제목을 변경하여 뷰 A로 돌아가려면 뷰 A에서 다음 코드를 사용하세요.
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self action:nil]; B视图不用做任何操作。110. 빈 객체가 있는데 nil도 null도 아닌데요?
NSNull입니다. 이 개체를 인쇄할 수 있으며(po 명령 또는 NSLog 사용) 인쇄된 결과는 "(null)"(nil 개체) 대신 "3974e2f309543466c662a718e86a1c17"입니다.
OCC 컬렉션 개체는 null 값(nil) 삽입을 허용하지 않고 NSNull이 nil이 아니기 때문에 NSNull 개체는 컬렉션이 비어 있음(목록의 끝을 나타냄)을 나타내는 데 사용됩니다. 또한 nil과 달리 NSNull에 메시지를 보내면 예외가 발생합니다.
NSNull에는 유일한 메소드가 있습니다: [NSNull null] 이를 사용하여 객체가 NSNull인지 여부를 테스트할 수 있습니다:
BOOL isNSNull(id any){ return [any isEqual:[NSNullnull]]; }
以上就是iOS 开发百问(9)的内容,更多相关内容请关注PHP中文网(www.php.cn)!