UIActivity自定义activityViewController在iPad上崩溃

时间:2013-08-30 12:37:28

标签: objective-c ipad uinavigationcontroller uiactivity

我有一个自定义UIActivity,用于创建设备的AddressBook的联系人。在这个UIActivity中,我创建了一个ABNewPersonViewController,将它放在UINavigationController中并在UIActivity中返回它

- (UIViewController *)activityViewController

问题是在iPad上我因为对已发布的U​​INavigationController的引用而崩溃。消息的类型为:

*** -[UINavigationController _viewControllerForSupportedInterfaceOrientations]: message sent to deallocated instance 0xa6f1660

在我的控制器被解除后,当界面改变方向时,iPad不会自动旋转视图。

我使用的代码如下:

在UIActivity中

- (void)prepareWithActivityItems:(NSArray *)activityItems
{    
    // Prepare the AB View Controller
    ABRecordRef aContact = ABPersonCreate();
    CFErrorRef error = NULL;

    ABRecordSetValue(aContact, kABPersonKindProperty, kABPersonKindOrganization, &error);
    ABRecordSetValue(aContact, kABPersonOrganizationProperty, @"Apple Inc.", &error);

    ABMultiValueRef phone = ABMultiValueCreateMutable(kABMultiStringPropertyType);
    ABMultiValueAddValueAndLabel(phone, @"+1 2345 784513", kABWorkLabel, NULL);
    ABRecordSetValue(aContact, kABPersonPhoneProperty, phone, &error);
    CFRelease(phone);

    self.newContactVC.title = @"New company";
    self.newContactVC.displayedPerson = aContact;
    [self.navigation setViewControllers:[NSArray arrayWithObject:self.newContactVC]];

    CFRelease(aContact);
}

- (UIViewController *)activityViewController
{   
    return self.navigation;
}

// Dismisses the new-person view controller.
- (void)newPersonViewController:(ABNewPersonViewController *)newPersonViewController didCompleteWithNewPerson:(ABRecordRef)person
{
    [self activityDidFinish:YES];
}

在ViewController 中调用此UIActivity

- (IBAction)showActionsSheet:(id)sender {        
    AddToAddressBookActivity *abActivity = [[AddToAddressBookActivity alloc] init];
    UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:nil
                                                                             applicationActivities:[NSArray arrayWithObject:abActivity]];

    activityVC.excludedActivityTypes = @[UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll];

    if (!self.popover || ![self.popover isPopoverVisible]) {
        self.popover = [[UIPopoverController alloc] initWithContentViewController:activityVC];
        [self.popover setDelegate:self];
        self.popover.passthroughViews = nil;
        [self.popover presentPopoverFromRect:self.showASBtn.frame
                                      inView:self.view
                    permittedArrowDirections:UIPopoverArrowDirectionAny
                                    animated:YES];
    }
}

非常感谢任何帮助。

链接到演示项目: http://ge.tt/23MeOYq/v/0?c

1 个答案:

答案 0 :(得分:0)

我有一个类似的问题,除了在活动视图控制器被解除后在旋转时发生崩溃。在我的情况下,我在故事板设置中将自定义视图控制器显示为“全屏”,并且在更改它以显示为“表单”时崩溃消失了。我不知道为什么会有所作为。

关于在自定义视图控制器关闭后您的自动旋转不起作用,请尝试向活动视图控制器添加完成处理程序,以使您的弹出视图控制器静态无效。我注意到,如果我没有这样做,自定义活动和自定义视图控制器不会被取消,并且不会发生自动旋转。 e.g:

avc.completionHandler = ^(NSString* activityType, BOOL completed){
    if ( UIUserInterfaceIdiomPad == [UIDevice currentDevice].userInterfaceIdiom )
        self.popover = nil;
};

另外,请查看帖子:"activityviewcontroller not dismissing",我认为这有用。