метод не вызывается с момента добавления изображения параллакса

#ios #objective-c #xcode #methods #delegates

#iOS #objective-c #xcode #методы #делегирует

Вопрос:

Итак, я недавно внедрил изображения параллакса в свое приложение, которое отлично работает, однако из-за этого сломалась кнопка, которая вызывает метод.

Вот изображение моей раскадровки:

http://imgur.com/uIonWrK

Вот мой код .h:

 @interface _01FirstViewController : UIViewController <UITextFieldDelegate, UIAccelerometerDelegate>{

UIAccelerometer *accelerometer;
float xoof;
float yoff;
float xvelocity;
float yvelocity;
float xaccel;
float yaccel;
}

@property (nonatomic, retain) UIAccelerometer *accelerometer;
@property (weak, nonatomic) IBOutlet UIScrollView *BGScrollView;
@property (weak, nonatomic) IBOutlet UIButton *Track;
@property (weak, nonatomic) IBOutlet UITextField *trackingNumber;
@property (strong, nonatomic) NSDictionary *posts;
@property (strong,nonatomic) NSString *TrackPoint;
@property (strong,nonatomic) NSArray *Path;
@property (strong,nonatomic) NSString *documentFolder;
@property (strong,nonatomic) NSString *filePath;

-(void)parseTrackNo;
-(void)reloadTrackingNumber;
  

Вот соответствующие части .m:

 - (void)viewDidLoad
{
_BGScrollView.contentSize =      CGSizeMake(_BGScrollView.frame.size.width 30,_BGScrollView.frame.size.width 30);
self.accelerometer = [UIAccelerometer sharedAccelerometer];
self.accelerometer.updateInterval = 0.03;
self.accelerometer.delegate = self;

[NSTimer scheduledTimerWithTimeInterval:-1 target:self selector:@selector(tick) userInfo:nil   repeats:YES];
}

-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{
float xx = -acceleration.x;
float yy = (acceleration.y   0.5f) *2.0f;
float acceldirX;
if (xvelocity * -1.0f >0){
    acceldirX = 1.0;
}
else {
    acceldirX = -1.0;
}


float newdirX;
if (xx > 0){
    newdirX = 1.0;
}
else {
    newdirX = -1.0;
}

float acceldirY;
if (yvelocity * -1.0f >0){
    acceldirY = 1.0;
}
else {
    acceldirY = -1.0;
}

float newDirY;
if (yy > 0){
    newDirY = 1.0;
}
else {
    newDirY = -1.0;
}

if (acceldirX == newdirX) xoof = acceleration.x * 30;
if (acceldirY == newDirY) yoff = acceleration.y *30;
}
  

Это кнопка, которая прекратила вызов метода:

 - (IBAction)Track:(id)sender {
[self parseTrackNo]; //Not calling method
NSLog(@"Button Pressed"); //This gets logged correctly

}
  

Я попытался удалить все изменения кода, поэтому я подозреваю, что это как-то связано с кнопкой, вложенной в представление в раскадровке, или с изменениями делегата.

Кто-нибудь может указать мне правильное направление?

ОТРЕДАКТИРУЙТЕ в соответствии с запросом код для parseTrackingNo (обратите внимание, что это работало отлично, пока не изменился параллакс):

 -(void)parseTrackNo
{

    _01AppDelegate *appDelegate = (_01AppDelegate *)[[UIApplication sharedApplication] delegate];

    //Get Tracking Number from textField
    appDelegate.TrackingNumber = _trackingNumber.text;

    //Check String isn't empty
    if ([_trackingNumber.text  isEqual: @""]){

    } else{

        //Check against Royal Mail API
        NSString *trackingURL = [NSString stringWithFormat:@"%@%@",   @"http://api.e44.co/tracktrace/", appDelegate.TrackingNumber];

        NSURL *royalMail = [NSURL URLWithString:trackingURL];

        //Return results
        NSData *royalMailResults = [NSData dataWithContentsOfURL:royalMail];

        //Parse JSON results
        if(royalMailResults != nil)
        {
            NSError *error = nil;
            id result = [NSJSONSerialization JSONObjectWithData:royalMailResults options:NSJSONReadingMutableContainers error:amp;error];
            if (error == nil)

            //Convert to dictionary/array
            self.posts = (NSDictionary *)resu<
            NSArray *trackRecords = _posts[@"trackRecords"];

            //Return keys from posts (Dict)
            NSString *response = [self.posts valueForKeyPath:@"response"];
            NSLog(@"Response: %@", response);

            NSString *returnedTrackingNumber = [self.posts valueForKeyPath:@"trackingNumber"];
            NSLog(@"Returned tracking number: %@", returnedTrackingNumber);

            NSString *delivered = [self.posts valueForKeyPath:@"delivered"];
            NSLog(@"delivered: %@", delivered);

            NSString *signature = [self.posts valueForKeyPath:@"signature"];
            NSLog(@"Signature: %@", signature);


            //Track Records
            NSString *Date = [trackRecords valueForKeyPath:@"date"];
            NSLog(@"date: %@", Date);

            NSString *Time = [trackRecords valueForKeyPath:@"time"];
            NSLog(@"time: %@", Time);

            NSString *Status = [trackRecords valueForKeyPath:@"status"];
            NSLog(@"status: %@", Status);

            appDelegate.LocationData = [[trackRecords valueForKey:@"trackPoint"] componentsJoinedByString:@""];
            NSLog(@"GeoLocation: %@", appDelegate.LocationData);


            //Check for Errors returned
            if ([self.posts objectForKey:@"errorMsg"]) {
                NSLog(@"ERROR MOTHERFUCKER");
                UIAlertView *alert = [[UIAlertView alloc]

                initWithTitle:@"Error"
                message:@"It appears that you have entered an incorrect tracking number"
                delegate:self
                cancelButtonTitle:@"OK"
                otherButtonTitles:nil, nil];
                [alert show];
            } else {
                [self performSegueWithIdentifier:@"addPackageSegue" sender:self];
            }
        }

    }
}
  

Комментарии:

1. Можете ли вы опубликовать код для своей parseTrackNo функции?

2. Добавлена функция ParseTrackNo 🙂

3. Спасибо. Вы поставили NSLog в первой строке parseTrackNo функции знак? Если нет, то как вы определили, что функция больше не вызывается? Кроме того, вы пробовали удалять parallax, чтобы убедиться, что это исходный код?

4. np. Ни один из NSLogs, например: NSLog(@"Response: %@", response); , не вызывается. Я удалил все изменения кода без каких-либо улучшений, однако я думаю, что проблема как-то связана с вложением кнопки в раскадровку

5. Все ваши журналы находятся в else инструкции, поэтому, если [_trackingNumber.text isEqual: @""] это TRUE так, ни один из ваших журналов не будет выведен. Попробуйте поместить журнал перед этой строкой.