سؤال

ما يلي هو داخل طريقة فيوفورتابلكولومن المندوب.أقوم بإنشاء أعمدة جدول ديناميكيا في مصدر البيانات بناء على تحديد في طريقة عرض القائمة.

    NSDictionary* rowData = [[self tableData] objectAtIndex:row];
    NSString* identifier = [tableColumn identifier];

    NSTableCellView* result = [tableView makeViewWithIdentifier:@"myCellView" owner:self];
    if (result == nil) {
        result = [[NSTableCellView alloc] initWithFrame:NSMakeRect(0, 0, 90.0, 10.0)];
        _textField = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 90.0, 10.0)];
        [result setTextField:_textField];
        [[result textField] setStringValue:[rowData objectForKey:identifier]];
    }
    else {
        [[result textField] setStringValue:[rowData objectForKey:identifier]];
    }
    NSLog(@"result text field: %@", [[result textField] stringValue]);

    return result;

الآن في

-(void)tableView:(NSTableView *)tableView didAddRowView:(NSTableRowView *)rowView             forRow:(NSInteger)row {
NSLog(@"did add: %ld", row);
NSTableCellView* aView = [rowView viewAtColumn:0];
NSLog(@"%@", [[aView textField]stringValue]);
NSLog(@"%@",[[[rowView viewAtColumn:0 ] textField] stringValue]);
}

حقل النص هو غيبوبة.ما يعطي?شكرا لمساعدتكم.

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

المحلول

كان لدى

للحصول على مرجع (iboutlet) ل NstableCellView في وحدة تحكم النافذة.هذا عن ذلك، لا شيء آخر.الآن يمكنني الوصول إلى ذلك عبر معرفها في مفوض NSTableView؛يتم الاحتفاظ بالمرجع حتى بعد إزالة جميع الأعمدة وإضافة أعمدة جديدة إلى الجدول الافتراضي.

التعامل الآن مع أداء الجدول الرديء للغاية على طاولات تتراوح من 300-3000 صفوف!هذا ليوم آخر.

نصائح أخرى

الشيء الوحيد الذي يمكنني التفكير فيه هو أنه عندما تفعل ذلك:

_textField = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 90.0, 10.0)];

أنت تتسبب في إطلاق سراح كل ما كان في السابق _textField.

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