2013-12-03 3 views
0

У меня есть 2 контроллера вида, и я передаю данные от 1 до 2, но NSString в 2 пуст (null), что я делаю неправильно?Данные переданы из контроллера представления, возвращающего null

вид Контроллер 1 .m

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    NSLog(@"Method 1"); 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    NSLog(@"Method 2"); 
    NSLog(@"%lu", (unsigned long)[allPosts count]); 
    return [[[allPosts objectForKey:@"posts"] valueForKey:@"title"] count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSLog(@"Method 3"); 
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

    cell.textLabel.text = [NSString stringWithFormat:@"%@", [[[allPosts objectForKey:@"posts"] valueForKey:@"title"] objectAtIndex:indexPath.row]]; 

    return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    OldPostViewController *vc = [[OldPostViewController alloc] init]; 
    NSString *url = [NSString stringWithFormat:@"server/app/post.php?id=%@", [[[allPosts objectForKey:@"posts"] valueForKey:@"id"] objectAtIndex:indexPath.row]]; 
    vc.postURL = url; 
    NSLog(@"%@", vc.postURL); 
    [self performSegueWithIdentifier:@"viewPost" sender:self]; 
} 

вид контроллер 2 .h

#import <UIKit/UIKit.h> 

@interface OldPostViewController : UIViewController <UIWebViewDelegate> 
@property (weak, nonatomic) IBOutlet UIWebView *blogView; 
@property (strong, nonatomic) NSString *postURL; 

@end 

вид контроллер 2 .m

NSLog(@"URL: %@", _postURL); 

NSString *fullURL = _postURL; 
NSURL *url = [NSURL URLWithString:fullURL]; 
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 
[blogView loadRequest:requestObj]; 

Пожалуйста, может кто-нибудь сказать мне, что я мог бы сделать, поскольку я попробовал все решения, которые я мог найти в Google & Stackoverflow

ответ

3

Вы не можете сделать это следующим образом. Когда вы вызываете performSegueWithIdentifier:, это не будет использовать локально инициализированный vc.

Для этого необходимо выполнить prepareForSegue:. Как:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"viewPost"]) 
    { 
     OldPostViewController *vc= (OldPostViewController *)[segue destinationViewController]; 
     vc.postURL = yourURL; 
    } 
} 

Или

Вы можете сделать это нравится:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    OldPostViewController *vc = [[OldPostViewController alloc] init]; 
    NSString *url = [NSString stringWithFormat:@"server/app/post.php?id=%@", [[[allPosts objectForKey:@"posts"] valueForKey:@"id"] objectAtIndex:indexPath.row]]; 
    vc.postURL = url; 
    NSLog(@"%@", vc.postURL); 
    [self presentViewController:vc animated:YES completion:nil]; 
} 
+0

Привет, спасибо за быстрый ответ, я реализовал метод didSelectRowAtIndexPath и все работы, за исключением, что вид делает не отображается экран, только черным, что это значит. –

+0

@ user2802926: declare 'vc' как свойство вместо локального экземпляра, тогда попробуйте –

+0

Привет, я создал его как локальное свойство, и он разбился при попытке представить контроллер представления –

0

Вам нужно будет сделать URL-адрес в методе didSelect как свойство, а затем получить его в файле prepareSegue метод

к сожалению, я не могу написать полный код прямо сейчас :)

Смежные вопросы