2016-04-14 134 views
0

我的问题是,在应用程序中,当用户点击某个地方不重要的alertView被提出没关系,我可以找到该视图的调用,但然后一次又一次显示为空,并且我在任何地方都看到了对任何警报的调用的断点。但是幽灵警报并没有突破,我不知道谁抛出它只是一个有感觉的观点。我有一个UIAlertView反复显示找不到问题的问题

你可以提供一些关于如何确定视图被调用的提示吗?

Phantom alertView

Breakpoint never hitting that alert

编辑:

代码为的viewController:

#import <CoreLocation/CoreLocation.h> 
#import "FormViewController.h" 
#import "FormPageViewController.h" 
#import "FormElement+UtilityMethods.h" 
#import "UserBO.h" 
#import "RecordBO.h" 
#import "RecordAnswer.h" 
#import "UserDefaultsUtilities.h" 
#import "TimeTrackingUtilities.h" 
#import "DxColors.h" 
#import "EDQueueUtilities.h" 
#import "GroupAnswerMetadata.h" 
#import "RecordAnswer+UtilityMethods.h" 
#import "Record+UtilityMethods.h" 
#import "FormPageIndexViewController.h" 
#import "ManagedObjectUtilities.h" 
#import "EDQueue.h" 
#import "EDQueueUtilities.h" 
#import "DxAnswerObject.h" 
#import "ImageAnswerMetadata.h" 

#import "DateUtilities.h" 
#import <ifaddrs.h> 
#import "CarbonKit.h" 

#define INITIAL_CONTROLLER_INDEX 0 
#define FORM_RECORDS_TEMP_NAME @"<~TMP>" 

#define TAG_RETURN_BUTTON 0 
#define TAG_SAVE_BUTTON 1 
#define TAG_SEND_BUTTON 2 

typedef NS_ENUM(NSUInteger, AlertViewPurpose) { 
    ALERT_VIEW_FORM_NONE    = 0, 
    ALERT_VIEW_FORM_SEND_SUCCESS  = 1, 
    ALERT_VIEW_FORM_SEND_FAILURE  = 2, 
    ALERT_VIEW_FORM_SAVE_PROMPT   = 3, 
    ALERT_VIEW_FORM_FILE_NAME_PROMPT = 4, 
    ALERT_VIEW_FORM_ASYNC_SEND_SUCCESS = 5, 
    ALERT_VIEW_FORM_COULDNT_SEND  = 6, 
    ALERT_VIEW_FORM_WANT_TO_SEND  = 7, 
    ALERT_VIEW_FORM_SAVE_IN_CONTEXT_PROMPT = 8, 
    ALERT_VIEW_FORM_FILE_NAME_IN_CTXT_SAVE_PROMPT = 9, 
    ALERT_VIEW_FORM_REQUIRED_INTERNET_CONECTION = 10, 
    // Enumeration counter. 
    ALERT_VIEW_PURPOSE_COUNT 
}; 

// Based on: 
// Ref.: http://www.appcoda.com/uipageviewcontroller-storyboard-tutorial/ 

@interface FormViewController() <RecordBOProtocol, FieldElementProtocol, 
CLLocationManagerDelegate, FormPageIndexProtocol,CarbonTabSwipeNavigationDelegate> 
{ 
    AlertViewPurpose _currentAlertViewPurpose; 
    CarbonTabSwipeNavigation *_carbonTabSwipeNavigation; 
    BOOL _unedited; 
    BOOL _formRecordNilAtStartUp; 
    BOOL _timestampTaken; 

    CLLocationManager *_locationManager; 
    CLLocation *_location; 
    NSDate *_timeSpentBaseTimestamp; 
    NSArray *_sortedPages; 
    NSUInteger _currentPageIndex; 
    NSString *formID; 
    NSArray *_pagesNames; 
} 

@property (weak, nonatomic) IBOutlet UILabel *lblFormTitle; 
@property (weak, nonatomic) IBOutlet UIButton *btnSmallReturn; 
@property (weak, nonatomic) IBOutlet UIButton *btnSmallSave; 
@property (weak, nonatomic) IBOutlet UIButton *btnSmallSend; 
@property (weak, nonatomic) IBOutlet UIButton *btnBigSend; 

@property (weak, nonatomic) IBOutlet UIBarButtonItem *btnReturn; 

@property (strong, nonatomic) IBOutlet UIButton *lblBack; 
@property (strong, nonatomic) IBOutlet UIButton *lblSave; 


@end 

@implementation FormViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
     _currentAlertViewPurpose = ALERT_VIEW_FORM_NONE; 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self localizedButtons]; 

    // Starting up location manager if form requires it. 
    // Ref.: 
    // https://developer.apple.com/library/ios/documentation/CoreLocation/Reference/CLLocationManager_Class/index.html#//apple_ref/occ/instm/CLLocationManager/requestAlwaysAuthorization 
    if ([self.form.geolocationEnabled boolValue]) { 

     _locationManager = [[CLLocationManager alloc] init]; 
     _locationManager.delegate = self; 

     if ([CLLocationManager locationServicesEnabled]) { 

      CLAuthorizationStatus status = [CLLocationManager authorizationStatus]; 

      if (status == kCLAuthorizationStatusNotDetermined) { 
       // Requesting authorization. 
       if ([CLLocationManager instancesRespondToSelector:@selector(requestWhenInUseAuthorization)]) { 
#ifdef DEBUG_MODE 
        NSAssert(
          [[[NSBundle mainBundle] infoDictionary] valueForKey:@"NSLocationWhenInUseUsageDescription"], 
          @"For iOS 8 and above, your app must have a value for NSLocationWhenInUseUsageDescription in its Info.plist"); 
#endif // DEBUG_MODE 
        [_locationManager requestWhenInUseAuthorization]; 
       } 
      } else if (status == kCLAuthorizationStatusAuthorizedAlways || 
         status == kCLAuthorizationStatusAuthorizedWhenInUse) { 
       _locationManager.distanceFilter = kCLDistanceFilterNone; 
       _locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters; 
       [_locationManager startUpdatingLocation]; 
      } 
     } 
    } 

    self.lblFormTitle.text = self.form.name ; 

    // Saving whether self.formRecord was nil at beginning. 
    // Important for time spent tap calculations. 
    _formRecordNilAtStartUp = self.formRecord == nil; 

    [self setup]; 

    //Take the time for counting 
    _timeSpentBaseTimestamp = [NSDate date]; 

    _unedited = YES; 
} 

-(void)localizedButtons 
{ 
    [self.lblBack setTitle:NSLocalizedString(@"Back", @"Regresar") forState:UIControlStateNormal]; 
    [self.lblSave setTitle:NSLocalizedString(@"Save", @"Guardar") forState:UIControlStateNormal]; 
    [self.btnBigSend setTitle:NSLocalizedString(@"Send", @"Enviar") forState:UIControlStateNormal]; 
} 
- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

// Overriding from DxBaseViewController. 
-(void)refresh 
{ 
} 

-(void)setup 
{ 
    // Obtaining sorted pages array. 
    _sortedPages = [[self.form.pages allObjects] 
        sortedArrayUsingComparator:^NSComparisonResult(Page *obj1, Page * obj2) { 
         return [obj1.pageNumber compare: obj2.pageNumber]; 
        }]; 
    //Adding toolBar 
    NSMutableArray *namesPages = [[NSMutableArray alloc]init]; 

    for (Page *page in _sortedPages) { 
     NSString *namePage = page.name; 
     [namesPages addObject:namePage]; 
    } 
    _pagesNames = [namesPages copy] ; 

    // Creating by default a record in case there's none. 
    if (self.formRecord == nil) { 
     self.formRecord = [Record createInContext:self.managedObjectContext]; 
     // Filling in basic record information. 
     self.formRecord.name = FORM_RECORDS_TEMP_NAME; 
     self.formRecord.editable = self.form.editableRecords; 
     self.formRecord.dateLastSaved = self.formRecord.dateCreated = [NSDate date]; 
     self.formRecord.syncStatusId = [NSNumber numberWithInt:SYNC_STATUS_NOT_SYNCED]; 
     self.formRecord.user = [UserBO loggedInUser]; 
     self.formRecord.form = self.form; 
     self.formRecord.formId = self.form.pkey; 
     self.formRecord.temporary = [NSNumber numberWithBool:YES]; 
     self.formRecord.isBeingEdited = [NSNumber numberWithBool:YES]; 
     // Committing record information as is. It will be removed if user doesn't 
     // want to save changes. 
     if (![Record commitChangesFromContext:self.managedObjectContext]) { 
      DebugLog(@"Temp form record couldn't be saved! Check!"); 
     } 



     // Initializing page view controller. 
     _carbonTabSwipeNavigation =[[CarbonTabSwipeNavigation alloc] initWithItems:_pagesNames 
                      delegate:self]; 
     _carbonTabSwipeNavigation.toolbar.barTintColor = [DxColors colorWithHexRGB:NEW_FORMS_GREEN]; 
     [_carbonTabSwipeNavigation setNormalColor:[UIColor whiteColor]]; 
     [_carbonTabSwipeNavigation setIndicatorColor:[UIColor whiteColor]]; 
     [_carbonTabSwipeNavigation setSelectedColor:[UIColor whiteColor]]; 

    } else { 
     [self prepareControllerForEdition]; 
    } 

    [_carbonTabSwipeNavigation insertIntoRootViewController:self]; 

    self.pageViewController = _carbonTabSwipeNavigation.pageViewController; 
} 

- (UIViewController *)carbonTabSwipeNavigation:(CarbonTabSwipeNavigation *)carbontTabSwipeNavigation 
         viewControllerAtIndex:(NSUInteger)index { 

    _currentPageIndex = index; 
    // Create a new view controller and pass suitable data. 
    FormPageViewController *formPageViewController = [[FormPageViewController alloc] init]; 
    formPageViewController.pageIndex = index; 
    formPageViewController.formPage = _sortedPages[index]; 
    formPageViewController.managedObjectContext = self.managedObjectContext; 
    formPageViewController.formRecord = self.formRecord; 
    formPageViewController.observer = self; 


    formPageViewController.view.frame = CGRectMake(0, 
                0, 
                self.view.frame.size.width, 
                self.view.frame.size.height); 

    return formPageViewController; 
} 

#pragma mark - Button Actions (IBActions) 

-(IBAction)send:(id)sender 
{ 
    _timer = [NSTimer scheduledTimerWithTimeInterval:0.001 
            target:self 
            selector:@selector(isAlertViewShowing:) 
            userInfo:nil 
            repeats:YES]; 

    [self setButtonWithTag:self.btnBigSend.tag toHighlight:NO]; 

    // Disabling button to avoid double submissions. 
    self.btnBigSend.enabled = NO; 

    // Show alert. 
    [self showAreYouReadyToSubmitFormMsg]; 

} 

...不能粘贴这一切

+2

尝试设置'UIAlertView show'方法的符号断点。 – rmaddy

+0

你能解释一下吗?怎么样? –

+1

点击断点列表左下方的+。选择添加符号断点。输入符号' - [UIAlertView show]'。 – rmaddy

回答

1

检查您的ViewController有一个uialertviewdelegate。

  1. 登录您的alertview.delegate

  2. 检查您的超类视图控制器,它不叫uialertviewdelegate功能。

  3. 如果是UIAlertController,检查viewWillAppear中,viewdidappear,viewwilldisappear(超类也是如此),并找出他们不叫[alertview秀]

+0

只是我得到的那个?还是所有代表的人呢? –

1

您可以赶上你AlertView的内容,如果它根本没有内容,请不要呈现!

为此,请检查您传递给显示alertView的方法的消息。

但是,我似乎无法找到您的方法showAreYouReadyToSubmitFormMsg

+0

听起来很有趣。我如何捕获它?如果我不知道在哪里被叫? –

1

仅用于测试:

子类UIAlertView@interface MyAlertView : UIAlertView

然后从MyAlertViewMyAlertView *someAlert = [[MyAlertView alloc] init.......];

取代的UIAlertView所有实例然后覆盖

-(void)show { 

[super show]; 

//Your breakpoint here 

OR 

NSLog([NSThread callStackSymbols]); 
} 
+0

我得到了它休息,谢谢你的建议,我现在已经修复它:) –

1

为什么你把枚举的alertview ?只需制作UIAlertView的实例即可显示。您可以创建一个方法,在该方法中可以传递两个字符串参数alertview massage和标题和方法显示带有此标题和按钮的alertview。

+0

是不是我的代码,我已继承,并在大多数情况下工作正常只有几个小问题在这里和那里:) –

+0

好吧好吧........ :) – Lion