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 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

可以更改 UIPickerView 的全局文本颜色吗?

在 iOS 7 中重用 UIPickerView 中的视图

为啥我的 UIPickerView 在选择时崩溃

UIPickerView 崩溃

滚动 UIPickerView 上的应用程序崩溃

iOS 应用程序在尝试使用 UIPickerView 加载视图时崩溃 NSUnknownKeyException