Ios UIPickerView崩溃
我不知道为什么下面的代码中有腐败。我几乎从示例中提取了现有的“实现”。不过,当我尝试更改picker控制器的值时,代码崩溃,因为cloudProviders指向一些随机内存。 请告知Ios UIPickerView崩溃,ios,objective-c,ios7,uipickerview,Ios,Objective C,Ios7,Uipickerview,我不知道为什么下面的代码中有腐败。我几乎从示例中提取了现有的“实现”。不过,当我尝试更改picker控制器的值时,代码崩溃,因为cloudProviders指向一些随机内存。 请告知 // SettingsViewController.h #import <UIKit/UIKit.h> @interface SettingsViewController : UIViewController <UIPickerViewDelegate, UIPickerViewDa
// 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
//SettingsViewController.h
#进口
@接口设置查看控制器:UIViewController
@属性(保留,非原子)IBUIPickerView*选择器;
@财产(保留,非原子)NSArray*云提供商;
@结束
//设置VIEWCONTROLLER.m
#导入“setingsviewcontroller.h”
@接口设置可视控制器()
@结束
@实现设置可视控制器
-(无效)viewDidLoad
{
[超级视图下载];
//加载视图后,通常从nib执行任何其他设置。
_cloudProviders=@[@“BOX”、@“Yandex”、@“Other”];
NSLog(@“正在执行viewDidLoad”);
}
-(无效)未收到记忆警告
{
[超级记忆警告];
//处置所有可以重新创建的资源。
}
-(无效)解除锁定{
[_选择器释放];
[super dealoc];
}
#布拉格标记-
#pragma-mark-PickerView数据源
-(NSInteger)PickerView中的组件数量:
(UIPickerView*)pickerView
{
返回1;
}
-(NSInteger)pickerView:(UIPickerView*)pickerView
行数组件:(NSInteger)组件
{
返回_cloudProviders.count;
}
-(NSString*)pickerView:(UIPickerView*)pickerView
titleForRow:(NSInteger)行
forComponent:(NSInteger)组件
{
返回_cloudProviders[row];
}
#布拉格标记-
#pragma-mark-PickerView委托
-(void)pickerView:(UIPickerView*)pickerView didSelectRow:(NSInteger)row
不完整:(NSInteger)组件
{
NSLog(@“正在执行didSelectRow”);
}
/*
-(iAction)textFieldReturn:(id)发件人
{
[发送方辞职第一响应方];
}
*/
@结束
另外,人们使用什么工具来追踪iOS上的内存泄漏等?有什么可以告诉我谁修改了我的指针吗
谢谢你,安娜是对的。
将属性设置为self.cloudProviders可以解决此问题。只要确保只将1 IB连接到一个对象,检查接口生成器崩溃消息是什么?看起来您正在使用手动内存管理(因为您正在调用
dealloc
中的release
)。在这种情况下,您可能应该执行self.cloudProviders=@[…]代码>在viewDidLoad
中。如果您切换到使用ARC,其中一些问题将为您解决。我仍然不理解为什么这两个问题不等价-我的属性将生成为_CloudProviders,但您是正确的。自助云提供商生存下来。谢谢你安娜,我再次感到抱歉。如何在stackoverflow上标记您的答案为正确?我看不到这样做的选择。一定是糟糕的一天。我道歉,再次感谢你。