#ios #objective-c #xcode #methods #delegates
#iOS #objective-c #xcode #методы #делегирует
Вопрос:
Итак, я недавно внедрил изображения параллакса в свое приложение, которое отлично работает, однако из-за этого сломалась кнопка, которая вызывает метод.
Вот изображение моей раскадровки:
Вот мой код .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
так, ни один из ваших журналов не будет выведен. Попробуйте поместить журнал перед этой строкой.