• 遇到这样的错误一开始真的很头痛,就这么个简单提示“thread 1: sinal sigabrt”,叫人如何定位是好啊?在没办法之时,突然想到了日志。最终通过查看 log nevigator才看出问题所在。 *** Terminating app due to ...

    遇到这样的错误一开始真的很头痛,就这么个简单提示“thread 1: sinal sigabrt”,叫人如何定位是好啊?在没办法之时,突然想到了日志。最终通过查看 log nevigator才看出问题所在。

    *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<XYZViewController 0x8f4c5f0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key txtHello.'


    问题是这样的,在通过Ctrl+拖拽的方式完成一个Text控件与ViewController的Outlet时输入了一个txtHello名称,结果我在ViewController类中仅把txtHello手动改成了其它名称才导致这样的结果。
    那为什么直接手动这个名称不行呢?经研究发现是因为还有一个地方没被修改过来,那就是storyboard中的控件名称。遇到这种问题最好是通过重构的方式来修改,或者同时要修改storyboard中相应的名称。前者当然比后者方便多了。
    展开全文
  • 刚刚初学的时候,经常看到提示:thread 1 breakpoint 1.1,从而使程序运行不下去,但是程序也没有错误,然后去查了查。发现很容易简单解决 其实breakpoint不是你的程序出错,而是人为(估计是不小心点到的)的给某一...
    刚刚初学的时候,经常看到提示:thread 1 breakpoint 1.1,从而使程序运行不下去,但是程序也没有错误,然后去查了查。发现很容易简单解决
    其实breakpoint不是你的程序出错,而是人为(估计是不小心点到的)的给某一行加上了breakpoint,也就是断点,导致程序运行到此处卡住了。
    解决的方法:
    找的提示breakpoint那一行,如果不知道就在代码的行开头找到浅蓝色的箭头,右键选择点击delete breakpoint 就all right了。
    展开全文
  • 最近开始做公司的ios项目,由于是c

    最近开始做公司的ios项目,由于是初学刚开始一个多月,经常会碰到app突然crash掉的现象,当出现thread 1:exc_bad_access(code=1,address=0x50000010)的提示时,这种错误通常是内存管理的问题,一般是访问了已经释放的对象导致的,可以开启僵尸对象(Zombie Objects)来定位问题,具体步骤为:

    在Xcode的菜单:Product->Scheme->Edit Scheme->

    选中Enable Zombie Objects


    启该选项后,程序在运行时,如果访问了已经释放的对象,则会给出较准确的定位信息,可以帮助确定问题所在,如我所遇到的:

    BiaoChengOA[791:60b] *** -[__NSArrayM release]: message sent to deallocated instance 0x10250c10

    而我此次遇到的问题是一个非常低级的错误(如下的代码段):

     NSMutableArray *tempArray = [[[NSMutableArray alloc] init] autorelease];

        

        for (int i=0;i<20; i++) {

            [tempArray addObject:@"test:"];

        }

        

        self.dataArray = [tempArray copy];

        [tempArray release];


    将autorelease去掉,问题解决。

    记得在问题被修复后,关闭该功能

    展开全文
  • 我觉得是书中没有直接按照工程建立的原因产生的 Warning: Error creating LLDB target at path '/Users/xxx/Library/Developer/Xcode/DerivedData/UIButtonSample-eryxewclqjzwmteykynjwccyfobg/Build/...

    我觉得是书中没有直接按照工程建立的原因产生的


    Warning: Error creating LLDB target at path '/Users/xxx/Library/Developer/Xcode/DerivedData/UIButtonSample-eryxewclqjzwmteykynjwccyfobg/Build/Products/Debug-iphonesimulator/UIButtonSample.app'- using an empty LLDB target which can cause slow memory reads from remote devices.

    2016-05-24 20:23:59.091 UIButtonSample[12590:2692545] *** Assertion failure in -[UIApplication _runWithMainScene:transitionContext:completion:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.60.7/UIApplication.m:3401

    2016-05-24 20:23:59.094 UIButtonSample[12590:2692545] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Application windows are expected to have a root view controller at the end of application launch'

    *** First throw call stack:

    (

    0   CoreFoundation                      0x02702494 __exceptionPreprocess + 180

    1   libobjc.A.dylib                     0x021bce02 objc_exception_throw + 50

    2   CoreFoundation                      0x0270232a +[NSException raise:format:arguments:] + 138

    3   Foundation                          0x00229322 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 118

    4   UIKit                               0x005d16dd -[UIApplication _runWithMainScene:transitionContext:completion:] + 4008

    5   UIKit                               0x005f6b2c __84-[UIApplication _handleApplicationActivationWithScene:transitionContext:completion:]_block_invoke3246 + 68

    6   UIKit                               0x005cdb8a -[UIApplication workspaceDidEndTransaction:] + 163

    7   FrontBoardServices                  0x03ee6110 __37-[FBSWorkspace clientEndTransaction:]_block_invoke_2 + 71

    8   FrontBoardServices                  0x03ee5be7 __40-[FBSWorkspace _performDelegateCallOut:]_block_invoke + 54

    9   FrontBoardServices                  0x03f0327f __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 23

    10  FrontBoardServices                  0x03f030ab -[FBSSerialQueue _performNext] + 174

    11  FrontBoardServices                  0x03f034fa -[FBSSerialQueue _performNextFromRunLoopSource] + 52

    12  FrontBoardServices                  0x03f027e8 FBSSerialQueueRunLoopSourceHandler + 33

    13  CoreFoundation                      0x02614e5f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15

    14  CoreFoundation                      0x0260aaeb __CFRunLoopDoSources0 + 523

    15  CoreFoundation                      0x02609f08 __CFRunLoopRun + 1032

    16  CoreFoundation                      0x02609846 CFRunLoopRunSpecific + 470

    17  CoreFoundation                      0x0260965b CFRunLoopRunInMode + 123

    18  UIKit                               0x005cd2da -[UIApplication _run] + 540

    19  UIKit                               0x005d2eb9 UIApplicationMain + 160

    20  UIButtonSample                      0x000e2df0 main + 128

    21  libdyld.dylib                       0x038c6a25 start + 1

    )

    libc++abi.dylib: terminating with uncaught exception of type NSException

    (lldb) 


    int retVal = UIApplicationMain(argc, argv, nil, @"UIButtonSampleAppDelegate");


    这句话报错,定位到UIButtonSampleAppDelegate.m这个类中,添加标红的一句话



    #import "UIButtonSampleAppDelegate.h"

    #import "RootViewController.h"


    @implementation UIButtonSampleAppDelegate


    - (void)dealloc {

      [navi_ release];

      [window_ release];

      [super dealloc];

    }


    - (void)applicationDidFinishLaunching:(UIApplication *)application {    


      CGRect frame = [[UIScreen mainScreen] bounds];

      window_ = [[UIWindow alloc] initWithFrame:frame];


      RootViewController* rootViewController = [[[RootViewController alloc] init] autorelease];

      navi_ = [[UINavigationController alloc] initWithRootViewController:rootViewController];


      [window_ addSubview:navi_.view];

        [window_ setRootViewController:navi_];

      [window_ makeKeyAndVisible];

    }


    @end



    展开全文
  • iOS线程休眠及取消

    2015-09-16 13:21:45
    在Java(Android)开发中,Thread调用了sleep后,interrupt能够使sleep中的Thread马上唤醒,但iOS中并未找到直接支持Thread休眠中唤醒的方式。 iOS对于多线程的支持有NSThread、NSOperation、GCD。找了很多资料...

    在Java(Android)开发中,Thread调用了sleep后,interrupt能够使sleep中的Thread马上唤醒,但iOS中并未找到直接支持Thread休眠中唤醒的方式。


    iOS对于多线程的支持有NSThread、NSOperation、GCD。找了很多资料,都未找到比较好的休眠方式。故自己使用NSCondition实现了一个。

    希望能够给大家带来一些帮助。如果大家有什么更好的方式,也欢迎回复讨论。


    废话不多说,直接上代码:

    ESPThread.h:

    #import <Foundation/Foundation.h>
    
    @interface ESPThread : NSObject
    
    + (ESPThread *) currentThread;
    
    - (BOOL) sleep: (long long) milliseconds;
    
    - (void) interrupt;
    
    - (BOOL) isInterrupt;
    
    @end
    

    ESPThread.m:

    #import "ESPThread.h"
    
    @interface ESPThread()
    
    @property(atomic, assign, getter=isInterrupt) BOOL isInterrupt;
    @property(atomic, strong) NSCondition *condition;
    
    @end
    
    @implementation ESPThread
    
    + (ESPThread *) currentThread
    {
        return [[ESPThread alloc]init];
    }
    
    - (id) init
    {
        self = [super init];
        if (self)
        {
            self.isInterrupt = NO;
            self.condition = [[NSCondition alloc]init];
        }
        return self;
    }
    
    - (BOOL) sleep: (long long) milliseconds
    {
        [self.condition lock];
        NSDate *date = [NSDate dateWithTimeIntervalSinceNow: milliseconds/1000.0];
        BOOL signaled = NO;
        while (!self.isInterrupt && (signaled = [self.condition waitUntilDate:date]))
        {
        }
        [self.condition unlock];
        return self.isInterrupt;
    }
    
    - (void) interrupt
    {
        [self.condition lock];
        self.isInterrupt = YES;
        [self.condition signal];
        [self.condition unlock];
    }
    
    @end


    使用Demo:

    - (void)viewDidLoad
    {
        [super viewDidLoad];
    	// Do any additional setup after loading the view, typically from a nib.
        
        __block ESPThread *thread = [ESPThread currentThread];
        
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            // 休眠1s后interrupt
            [thread sleep:1000];
            NSLog(@"interrupt");
            [thread interrupt];
        });
        NSLog(@"Sleep start");
        // 休眠3s
        [thread sleep:3000];
        NSLog(@"Sleep stop");
    }
    

    输出结果:

    2015-09-16 13:11:15.236 XXXXXX[10213:405212] Sleep start

    2015-09-16 13:11:16.237 XXXXXX[10213:405315] interrupt

    2015-09-16 13:11:16.237 XXXXXX[10213:405212] Sleep stop


    NSThread的Demo:

    - (void)viewDidLoad
    {
        [super viewDidLoad];
    	// Do any additional setup after loading the view, typically from a nib.
        
        __block NSThread *thread = [NSThread currentThread];
        
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            // 休眠1s后cancel
            [NSThread sleepForTimeInterval:1.0];
            NSLog(@"cancel");
            [thread cancel];
        });
        NSLog(@"Sleep start");
        // 休眠3s
        [NSThread sleepForTimeInterval:3.0];
        NSLog(@"Sleep stop");
        
    }

    输出结果:

    2015-09-16 13:15:54.585 XXXXXX[10285:408139] Sleep start

    2015-09-16 13:15:55.586 XXXXXX[10285:408243] cancel

    2015-09-16 13:15:57.591 XXXXXX[10285:408139] Sleep stop



    可以看到,NSThread进入sleep之后,cancel是无法把Thread唤醒的。

    注意:提供的代码中,借用了Java中sleep和interrupt概念,故sleep中的单位为ms。传入值为long long。不喜欢的可以根据自己的喜好来更改。

    展开全文
  • 一、线程(Thread)接口简单用法首先笔者一直在做安卓开发,只是一位ios的初学者,以下内容如有不正确之处,还望各位大牛们指出。 在网上很多帖子里面,我有看到大家常使用的NSThread,可能因为我的XCode已经更新...
  • 在输出NSRange的时候报错, ...thread exc bad access code = 1 address = 0x6 解决办法: 输出不能直接输出,需要如下: if (range.length > 0) NSLog(@"Range is: %@", NSStringFromRange(range));
  • 内容为原创,只有最底下的图片是从网络上找到的,它很好很淘气的说明了问题。
  • 出现这个错误,很有可能是你修改过控件的referencing outlets。有可能出现了重复添加或者添加了无用的引用。查看办法是: 点开Main.storyboard, ...查看是否存在错误的outlet设置,找到之后删除。...
  • iOS基础面试题(一)

    2016-03-23 18:19:35
    kaikaijia同学私信我,说想加群,我就建个iOS开发群,大家做技术交流和资源,群号:241048287,有兴趣的同学可以加群,验证信息:iOS+姓名。 iOS面试题系列: iOS面试题(二) iOS面试题(三) iOS面试题(四) 随着...
  • 参数1: 执行参数2方法的对象 参数2: 开启线程后执行的方法 参数3: 传递的对象数据(参数2的方法可以直接用) */ // OC - (instancetype)initWithTarget:(id)target selector:(SEL)selector object:(id)argument; ...
  • Main Thread Checker: UI API called on a background thread 请检查工程中,是否在后台线程(非主线程)调用 AppKit、UIKit相关的API,比如iOS 10+ 请求通知权限时,[application ...
  • Product-Scheme-EditScheme-diagnostics(或Command+Shift+,唤出设置框),勾选Malloc Stack,Zombie Objects。 或者
  • 最近领导让添加ios 微信分享视频的功能,之前做的只有微信分享本地图片的功能。 查看官网并没有找到答案,后来在其官网论坛中http://bbs.mob.com/thread-20938-1-1.html 这里面发现新版的sdk(v3.2.1)中才添加的...
  • 你没看错,iOS13 beta 内测版系统刚出没多久,那么快被攻破了,在2019年6月11日国外越狱大神 iBSparkes 开发者 在推特分享了二张图片,分别为iOS12.4 和 iOS 13 已经越狱的 Cydia 截图。众所周知一旦设备成功搭载 ...
  • 1、访问相册权限 NSPhotoLibraryAddUsageDescription 有的文章中提及iOS 11将访问相册权限的NSPhotoLibraryUsageDescription改成了NSPhotoLibraryAddUsageDescription。实际并非如此通过官方API 解释iOS 10新增的...
  • iOS RunLoop完全指南

    2018-05-24 17:55:18
    提起RunLoop,相信每个iOS开发都或多或少的听过,面试时也会经常作为压箱底的问题来问。之前写过RunLoop相关的内容,但是那时写的太浅,基本都是照着苹果文档的翻译。今天,就重新深入了解一下RunLoop。 什么是...
  • 转自:... Main Thread Checker: UI API called on a background thread: -[UIApplication applicationState] PID: 61808, TID: 11632650, Thread name: (none), Queue name: com...
  • 2017-11-13 11:39:04.348973+0800 PlantsAndFlowers[11262:2146383] [reports] Main Thread Checker: UI API called on a background thread: -[UIApplication statusBarOrientation] PID: 11262, TID: 2146383,
  • 今天刚更新的Xcode9.0,第一个坑:解决方法:第一步:第二步:重新运行一下就好了。
1 2 3 4 5 ... 20
收藏数 38,084
精华内容 15,233