从Facebook导入时iOS活动断言超出允许时间错误

从Facebook导入时iOS活动断言超出允许时间错误,ios,objective-c,facebook,import,assertions,Ios,Objective C,Facebook,Import,Assertions,我的印象是,“超出允许时间的主动断言”错误适用于应用程序首次加载时。然而,今天我正在测试我的应用程序,使用iOS 7从Facebook批量导入,应用程序因此错误而崩溃 具体而言,我打电话: [NSData DATA WITHCONTENTSOFURL:[NSURL URLWithString:url]] 从好友选择器中选择的每个好友两次(两个不同的URL)。当我试图进口10个人时,飞机坠毁了 我很困惑——就这一点而言,这个应用程序已经完全启动了。为什么这种断言会发生在这里 崩溃日志部分: Inc

我的印象是,“超出允许时间的主动断言”错误适用于应用程序首次加载时。然而,今天我正在测试我的应用程序,使用iOS 7从Facebook批量导入,应用程序因此错误而崩溃

具体而言,我打电话:

[NSData DATA WITHCONTENTSOFURL:[NSURL URLWithString:url]]

从好友选择器中选择的每个好友两次(两个不同的URL)。当我试图进口10个人时,飞机坠毁了

我很困惑——就这一点而言,这个应用程序已经完全启动了。为什么这种断言会发生在这里

崩溃日志部分:

Incident Identifier: 0A705B17-FE23-4585-B3EF-89E34F4A4E89
CrashReporter Key:   a9ef164d188c1490dffbe7fdd3c467823e2f3c19
Hardware Model:      iPhone3,1
Process:             MyApp [3366]
Path:                /var/mobile/Applications/9CEDB552-C091-4FD7-AF1F-BE39A9D07C67/MyApp.app/MyApp
Identifier:          com.mycom.myApp
Version:             1.5.2 (1.5.2)
Code Type:           ARM (Native)
Parent Process:      launchd [1]

Date/Time:           2013-11-24 14:56:00.894 -0500
OS Version:          iOS 7.0.3 (11B511)
Report Version:      104

Exception Type:  00000020
Exception Codes: 0x000000008badf00d
Highlighted Thread:  0

Application Specific Information:
MyApp[3366] has active assertions beyond permitted time: 
{(
    <BKProcessAssertion: 0x145564c0> identifier: Suspending process: MyApp[3366] permittedBackgroundDuration: 10.000000 reason: suspend owner pid:28 preventSuspend  preventThrottleDownCPU  preventThrottleDownUI  preventSuspendOnSleep 
)}

Elapsed total CPU time (seconds): 3.010 (user 3.010, system 0.000), 49% CPU 
Elapsed application CPU time (seconds): 0.005, 0% CPU

Thread 0:
0   libsystem_kernel.dylib          0x3a6b9adc semaphore_wait_trap + 8
1   libdispatch.dylib               0x3a603fa0 _dispatch_semaphore_wait_slow + 172
2   CFNetwork                       0x2f9426e0 CFURLConnectionSendSynchronousRequest + 264
3   Foundation                      0x3070a7ae +[NSURLConnection sendSynchronousRequest:returningResponse:error:] + 110
4   Foundation                      0x306da8c6 -[NSData(NSData) initWithContentsOfURL:] + 182
5   Foundation                      0x306da7f6 +[NSData(NSData) dataWithContentsOfURL:] + 38
6   MyApp                       0x0020e1a8 +[FacebookHelper imageForObject:] (FacebookHelper.m:910)
7   MyApp                       0x0021bfe4 -[PersonViewController(Facebook) importFriend:withCompletion:] (PersonViewController+Facebook.m:110)
8   MyApp                   0x0021bc2a -[PersonViewController(Facebook) importFriends:] (PersonViewController+Facebook.m:70)
9   Foundation                      0x30758386 __NSFireDelayedPerform + 410
10  CoreFoundation                  0x2fd490dc __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 12
11  CoreFoundation                  0x2fd48cf2 __CFRunLoopDoTimer + 778
12  CoreFoundation                  0x2fd4708e __CFRunLoopRun + 1206
13  CoreFoundation                  0x2fcb1c22 CFRunLoopRunSpecific + 518
14  CoreFoundation                  0x2fcb1a06 CFRunLoopRunInMode + 102
15  GraphicsServices                0x3499027e GSEventRunModal + 134
16  UIKit                           0x32555044 UIApplicationMain + 1132
17  MyApp                       0x000fc146 main (main.m:5)
18  libdyld.dylib                   0x3a615ab4 start + 0
编辑:这是否允许我使用返回的图像在我的主线程上保存到我的app delegate managedObjectContext?换句话说,线程是安全的,还是我需要创建和管理整个新的managedObjectContext,然后合并它,等等。?与上述方法相反,对这个修改后的方法进行多个密集调用是否有助于避免“超出允许时间的主动断言”错误


自从调用该方法以来,已经过了多少时间?是否在UI线程上运行该方法?尝试使用GCD dispatch_async(dispatch_get_global_queue(dispatch_queue_PRIORITY_background,0))中的后台线程,^{这里的代码});0x000000008badf00d表示看门狗因为没有响应而杀死了你的应用程序。使用
GCD
NSOperationQueue
在后台队列上运行任何耗时的导入。您只需在后台执行“获取”!然后,您可以使用dispatch_async(dispatch_get_main_queue(),^{//do work here})返回主线程;//如果这太复杂,无法以评论的形式阅读,我也可以为你的问题写一个答案,但我还不确定,这是否能解决你的问题!是的,当你完全阻塞主线程时,应用程序被认为被卡住了。(还有糟糕的用户体验;))
+ (UIImage *)imageForObject:(NSString *)objectID {

    __ENTERING_METHOD__
    NSString *url = [[NSString alloc] initWithFormat:@"https://graph.facebook.com/%@/picture?width=%d&height=%d",objectID,IMAGE_MAXWIDTH,IMAGE_MAXHEIGHT];
    UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:url]]];
    return image;
}
+ (UIImage *)imageForObject:(NSString *)objectID {

    NSString *url = [[NSString alloc] initWithFormat:@"https://graph.facebook.com/%@/picture?width=%d&height=%d",objectID,IMAGE_MAXWIDTH,IMAGE_MAXHEIGHT];
    __block UIImage *image;

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];

        dispatch_async(dispatch_get_main_queue(), ^{

            image = [[UIImage alloc] initWithData:data];
        });
    });
    return image;
 }