سؤال

في ملف Uiview nib الخاص بي، لدي نظرة قديمة تتولى حوالي نصف الشاشة. ملفات correpphonding .h و .m هي:

// helloViewController.h
#import <UIKit/UIKit.h>
@interface helloViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {
    NSArray *locationArray;
}
@property (nonatomic, retain) NSArray *locationArray;
@end

// helloViewController.m
@synthesize locationArray;
- (void)viewDidLoad {
    locationArray = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", @"5", @"6", @"7", @"8",  @"9",  @"10",  @"11", nil];
    [super viewDidLoad];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    [[cell textLabel] setText: [locationArray objectAtIndex:[indexPath row]]];

    return cell;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 8;
}

عندما أقوم بتشغيل هذا، تعطل عندما أحاول التمرير الجدول (بدون خطأ في المصحح). ومع ذلك، إذا قمت باستبدال [[Cell TextLabel] SetSext: [LocationArleAray UnsesatEntex: [indexphath صف]]]؛ مع

[[cell textLabel] setText:@"Boom"];

... لا تحطم ....

ما الذي يسبب هذه المشكلة؟ يتم توصيل المندوب ومصادر البيانات بمالك الملف في IB، ويتم تعيين فئة مالك الملف على الفئة الصحيحة. هل هي مشكلة في أنني أستخدم عرض جدول داخل UIView في المنقار؟

هل كانت مفيدة؟

المحلول

المشكلة هي أنك تحدد locationArray إلى كائن autoreladed في viewDidLoad. وبعد ثم تحاول الوصول إلى هذا الكائن مرة أخرى حيث تريد تعيين الخلية، ولكن تم إلغاء تخصيص الصفيف بحلول ذلك الوقت.

يجب عليك استخدام خاصية الاحتفاظ التي حددتها (أنت تقوم بإعداد الصفيف مباشرة، ولا تستخدم العقار) و قراءة بعض أكثر على إدارة الذاكرة. ;)

self.locationArray = [NSArray arrayWith...];

نصائح أخرى

ربما لأن موقعك لم يتم الاحتفاظ به مسبقا والآن يشير إلى ذاكرة القمامة. ذلك، أو locationArnay لا يحتوي على عنصر في الفهرس المحدد.

نعم إنه بسبب بعض الذاكرة المحتجزة للمجموعة. يجب عليك إصدار موقع صفيف Ivar في طريقة Deallec.use هذا الرمز

NSArray *array = [[NSArray alloc] initWithObjects:@"1",@"2",@"3",@"4",nil];
self.locationArray = array ;
[array release];

في طريقة deallec

 [locationArray release];
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top