2012-10-09 218 views
0

我有點難住,出於某種原因,下面的代碼會導致我的應用在真實的iPhone上崩潰,雖然它在模擬器中運行良好,但它抓取一些json並將其放入列表視圖中,是否有人任何想法爲什麼它不斷崩潰?任何幫助是極大的讚賞!iPhone應用程序不斷崩潰?

-------- SecondViewController.m ------

#import "SecondViewController.h" 

@interface SecondViewController() 

@end 

@implementation SecondViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self fetchPrices];   
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
} 

- (void)fetchPrices 
{ 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     NSData* data = [NSData dataWithContentsOfURL: 
         [NSURL URLWithString: @"http://url.php"]]; 

     NSError* error; 

     prices = [NSJSONSerialization JSONObjectWithData:data 
               options:kNilOptions 
                error:&error]; 

     dispatch_async(dispatch_get_main_queue(), ^{ 
      [self.tableView reloadData]; 
     }); 
    }); 
} 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return prices.count; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"PriceCell"; 

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

    NSDictionary *price = [prices objectAtIndex:indexPath.row]; 
    NSString *text = [price objectForKey:@"name"]; 
    NSString *name = [price objectForKey:@"price"]; 

    cell.textLabel.text = text; 
    cell.detailTextLabel.text = [NSString stringWithFormat:@"Price: %@", name]; 

    return cell; 
} 
@end 

----- SecondViewController.h ----

#import <UIKit/UIKit.h> 

@interface SecondViewController : UITableViewController { 
NSArray *prices; 
} 

- (void)fetchPrices; 

@end 

--- - 崩潰日誌---- http://pastebin.com/cnf6L7Jf

+5

你有什麼異常?哪條線路崩潰? –

+0

是的,我們需要崩潰日誌。 – tarmes

+0

@PhillipMills我將崩潰日誌添加到pastbin! –

回答

1

問題是,NSArray *價格是在您提取價格和處理價值之間的隨機值。其次,你不保留它。所以價格也可以是垃圾價值。

的清潔方式是

@property(nonatomic, retain)NSArray *prices; 
/**/ 
@synthetise prices; 

// then 
SELF.prices = [[NSJSONSerialization JSONObjectWithData:data 
               options:kNilOptions 
                error:&error]; 

讓「價格」是零,當你草簽你tablecontroller,並始終可用當u需要它。

不要忘了釋放它在你的dealloc方法

+0

所有實例變量都初始化爲「nil」。雖然在這裏使用財產是一個很好的做法。 –

+0

是的,你其實是對的。初始化時,每個全球級伊娃都是零/ 0。順便如果您需要重新分配很多時間的價格,保持合成的方法。如果你只需要一次,你可以忘記@synthetise,但你需要明確保留JSON數據 –

+0

我有點困惑,我想把它放在我的.h文件中? –