UIPickerView 崩溃
Posted
技术标签:
【中文标题】UIPickerView 崩溃【英文标题】:UIPickerView crashing 【发布时间】:2014-08-11 14:27:57 【问题描述】:我不知道为什么下面的代码有损坏。我几乎从示例中提升了现有的“实现”。不过,当我尝试更改选择器控制器的值时,代码会崩溃,因为 cloudProviders 指向一些随机内存。 请指教。
// SettingsViewController.h
#import <UIKit/UIKit.h>
@interface SettingsViewController : UIViewController
<UIPickerViewDelegate, UIPickerViewDataSource>
@property (retain, nonatomic) IBOutlet UIPickerView *picker;
@property (retain, nonatomic) NSArray *cloudProviders;
@end
// SettingsViewController.m
#import "SettingsViewController.h"
@interface SettingsViewController ()
@end
@implementation SettingsViewController
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_cloudProviders = @[@"BOX", @"Yandex", @"Other"];
NSLog(@"Executing viewDidLoad");
- (void)didReceiveMemoryWarning
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
- (void)dealloc
[_picker release];
[super dealloc];
#pragma mark -
#pragma mark PickerView DataSource
- (NSInteger)numberOfComponentsInPickerView:
(UIPickerView *)pickerView
return 1;
- (NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component
return _cloudProviders.count;
- (NSString *)pickerView:(UIPickerView *)pickerView
titleForRow:(NSInteger)row
forComponent:(NSInteger)component
return _cloudProviders[row];
#pragma mark -
#pragma mark PickerView Delegate
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row
inComponent:(NSInteger)component
NSLog(@"Executing didSelectRow");
/*
-(IBAction)textFieldReturn:(id)sender
[sender resignFirstResponder];
*/
@end
另外,人们使用什么工具来追踪 ios 上的内存泄漏等问题?有什么可以告诉我谁修改了我的指针?
谢谢
【问题讨论】:
只要确保您只将 1 个 IB 连接到一个对象,请检查您的界面构建器 什么是崩溃信息? 看起来您正在使用手动内存管理(因为您在dealloc
中调用了 release
)。在这种情况下,您可能应该在viewDidLoad
中执行self.cloudProviders = @[...];
。如果您改用 ARC,我们会为您处理其中一些问题。
我仍然不明白为什么两者不相等 - 我的属性将生成为 _cloudProviers,但你是对的。 self.cloudProviders 幸存下来。谢谢
安娜,再次抱歉。如何在***上将您的答案标记为正确?我没有看到这样做的选择。一定是糟糕的一天。再次道歉并再次感谢您。
【参考方案1】:
安娜是正确的。 将属性设置为 self.cloudProviders 即可解决问题。
【讨论】:
以上是关于UIPickerView 崩溃的主要内容,如果未能解决你的问题,请参考以下文章