2014-07-01 31 views
0

當用戶點擊一個單元格時,我想itemURL被設置爲該單元格的「Item URL」屬性。一旦它這樣做,它應該發送itemURLprepareForSegueWebViewController,因爲我試圖做。當我有WebViewControllerNSLogitemURL屬性但是,它出現爲空。我如何確保價值正確發送?ViewController沒有正確地通過NSURL數據發送到目的地ViewController

MatchCenterViewController.h:

#import <UIKit/UIKit.h> 
#import <Parse/Parse.h> 
#import "AsyncImageView.h" 
#import "SearchViewController.h" 
#import "WebViewController.h" 



@interface MatchCenterViewController : UIViewController <UITableViewDataSource> 

@property (nonatomic) IBOutlet NSString *itemSearch; 

@property (nonatomic, strong) NSArray *imageURLs; 
@property (strong, nonatomic) NSString *matchingCategoryCondition; 
@property (strong, nonatomic) NSString *matchingCategoryLocation; 
@property (strong, nonatomic) NSNumber *matchingCategoryMaxPrice; 
@property (strong, nonatomic) NSNumber *matchingCategoryMinPrice; 

@property (strong, nonatomic) NSArray *matchCenterArray; 
@property (strong, nonatomic) NSString *searchTerm; 

@property (strong, nonatomic) NSURL *itemURL; 

@end 

MatchCenterViewController.m:

#import "MatchCenterViewController.h" 
#import <UIKit/UIKit.h> 

@interface MatchCenterViewController() <UITableViewDataSource, UITableViewDelegate> 
@property (nonatomic, strong) UITableView *matchCenter; 
@end 

@implementation MatchCenterViewController 


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


- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.matchCenter = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewCellStyleSubtitle]; 
    self.matchCenter.frame = CGRectMake(0,50,320,self.view.frame.size.height-100); 
    _matchCenter.dataSource = self; 
    _matchCenter.delegate = self; 
    [self.view addSubview:self.matchCenter]; 

    _matchCenterArray = [[NSArray alloc] init]; 
} 

- (void)viewDidAppear:(BOOL)animated 
{ 
    self.matchCenterArray = [[NSArray alloc] init]; 

    [PFCloud callFunctionInBackground:@"MatchCenter" 
         withParameters:@{ 
             @"test": @"Hi", 
             } 
           block:^(NSArray *result, NSError *error) { 

            if (!error) { 
             _matchCenterArray = result; 
             [_matchCenter reloadData]; 

             NSLog(@"Result: '%@'", result); 
            } 
           }]; 
} 


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return _matchCenterArray.count; 
} 

//the part where i setup sections and the deleting of said sections 

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { 
    return 21.0f; 
} 


- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 
    UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 21)]; 
    headerView.backgroundColor = [UIColor lightGrayColor]; 

    _searchTerm = [[[[_matchCenterArray objectAtIndex:section] objectForKey:@"Top 3"] objectAtIndex:3]objectForKey:@"Search Term"]; 

    UILabel *headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(8, 0, 250, 21)]; 
    headerLabel.text = [NSString stringWithFormat:@"%@", _searchTerm]; 
    headerLabel.font = [UIFont boldSystemFontOfSize:[UIFont systemFontSize]]; 
    headerLabel.textColor = [UIColor whiteColor]; 
    headerLabel.backgroundColor = [UIColor lightGrayColor]; 
    [headerView addSubview:headerLabel]; 


    UIButton *deleteButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    deleteButton.tag = section; 
    deleteButton.frame = CGRectMake(300, 2, 17, 17); 
    [deleteButton setImage:[UIImage imageNamed:@"xbutton.png"] forState:UIControlStateNormal]; 
    [deleteButton addTarget:self action:@selector(deleteButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
    [headerView addSubview:deleteButton]; 
    return headerView; 

} 



- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return 3; 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Initialize cell 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (!cell) { 
     // if no cell could be dequeued create a new one 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 
    } 

    // No cell seperators = clean design 
    tableView.separatorColor = [UIColor clearColor]; 

    // title of the item 
    cell.textLabel.text = _matchCenterArray[indexPath.section][@"Top 3"][indexPath.row][@"Title"]; 
    cell.textLabel.font = [UIFont boldSystemFontOfSize:14]; 

    // price of the item 
    cell.detailTextLabel.text = [NSString stringWithFormat:@"$%@", _matchCenterArray[indexPath.section][@"Top 3"][indexPath.row][@"Price"]]; 
    cell.detailTextLabel.textColor = [UIColor colorWithRed:0/255.0f green:127/255.0f blue:31/255.0f alpha:1.0f]; 

    // image of the item 
    NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:_matchCenterArray[indexPath.section][@"Top 3"][indexPath.row][@"Image URL"]]]; 
    [[cell imageView] setImage:[UIImage imageWithData:imageData]]; 

    return cell; 

} 


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return 65; 
} 


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSURL *itemURL = _matchCenterArray[indexPath.section][@"Top 3"][indexPath.row][@"Item URL"]; 

// NSLog(@"The url is: '%@'", itemURL); 

    [self performSegueWithIdentifier:@"WebViewSegue" sender:self]; 
} 


- (void)deleteButtonPressed:(id)sender 
{ 
    // links button 
    UIButton *deleteButton = (UIButton *)sender; 

    // Define the sections title 
    NSString *sectionName = _searchTerm = [[[[_matchCenterArray objectAtIndex:deleteButton.tag] objectForKey:@"Top 3"] objectAtIndex:3]objectForKey:@"Search Term"]; 

    // Run delete function with respective section header as parameter 
    [PFCloud callFunctionInBackground:@"deleteFromMatchCenter" 
         withParameters: 
         @{@"searchTerm": sectionName,} 
           block:^(NSDictionary *result, NSError *error) { 
            if (!error) { 
             [PFCloud callFunctionInBackground:@"MatchCenter" 
                  withParameters:@{ 
                      @"test": @"Hi", 
                      } 
                    block:^(NSArray *result, NSError *error) { 

                     if (!error) { 
                      _matchCenterArray = result; 
                      [_matchCenter reloadData]; 

                      NSLog(@"Result: '%@'", result); 
                     } 
                    }]; 

            } 
           }]; 
} 



- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 



#pragma mark - Navigation 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 


    WebViewController *controller = (WebViewController *) segue.destinationViewController; 
    controller.itemURL = self.itemURL; 


} 


@end 

WebViewController.h:

#import <UIKit/UIKit.h> 
#import "MatchCenterViewController.h" 

@interface WebViewController : UIViewController <UIWebViewDelegate> 

@property (strong, nonatomic) NSURL *itemURL; 
@property (weak, nonatomic) IBOutlet UIWebView *myWebView; 

@end 

WebViewController.m:

#import "WebViewController.h" 

@interface WebViewController() 

@end 

@implementation WebViewController 

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


- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSLog(@"The url is: '%@'", _itemURL); 

// _myWebView=[[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)]; 
// _myWebView.delegate=self; 
// [self.view addSubview:_myWebView]; 

    self.myWebView.delegate = self; 

    ////////// 
    NSURLRequest *request = [NSURLRequest requestWithURL:_itemURL]; 
    //4 
    NSOperationQueue *queue = [[NSOperationQueue alloc] init]; 

    //5 
    [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) 
    { 
     if ([data length] > 0 && error == nil) [self.myWebView loadRequest:request]; 
     else if (error != nil) NSLog(@"Error: %@", error); 
    }]; 

    [self.myWebView setScalesPageToFit:YES]; 
    ////// 





    //[self.myWebView loadRequest:request]; 
} 
- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

/* 
#pragma mark - Navigation 

// In a storyboard-based application, you will often want to do a little preparation before navigation 
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    // Get the new view controller using [segue destinationViewController]. 
    // Pass the selected object to the new view controller. 
} 
*/ 

@end 
+3

當問一個問題,嘗試後儘可能少的代碼,儘可能使閱讀這個問題更快,因此讓讀者的生活更輕鬆。在這裏,你可以只發布到WebViewController的方法('didSelectRowFroIndexPath:'和'prepareForSegue:') – tomahh

+0

也可以刪除所有空的/默認的模板方法,如果你不改變它們,它們不是爲你做任何事情讓他們離開。 –

+0

@TomAhh對,對不起。我原本想要,但我不確定是否有任何可能很重要。下次我會記住它。 – Ghobs

回答

3

在你的didSelectRowForIndexPath:代替

NSURL *itemURL = _matchCenterArray[indexPath.section][@"Top 3"][indexPath.row][@"Item URL"]; 

使用

self.itemURL = _matchCenterArray[indexPath.section][@"Top 3"][indexPath.row][@"Item URL"]; 
相關問題