سؤال

UIBarButtonItem *rButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:NULL];

rButton.action = @selector(refreshAction);
self.navigationItem.rightBarButtonItem = rButton;
[rButton release];

ورمز أعلاه يعمل بشكل جيد لإنشاء زر وإضافته إلى شريط التنقل، ولكن عندما كنت اضغط على زر تعطل التطبيق مع EXC_BAD_ACCESS. إذا كنت التعليق خارج rButton.action =selector (refreshAction)؛ والنقر على زر لن تفعل أي شيء لكنه لا يتلف سواء.

- (void)refreshAction {
    NSLog(@"refreshAction");
}

وهذا الرمز هو في طريقة TableViewController في viewDidLoad التي يتم الضغط إلى المكدس navigationController من أسلوب NavigationViewController viewDidLoad.

وقضيت ربما 3 ساعات في محاولة للحصول على هذا العمل، ولكن دون جدوى.

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

المحلول

وأما إدارة الذاكرة المعتادة وكان الجاني. تحميل tableViewController من navigationController:

و

NearbyTableViewController *tableController = [[[NearbyTableViewController alloc] initWithNibName:@"NearbyTableViewController" bundle:nil] autorelease];
self.nearbyTableController = tableController;   

[self pushViewController:self.nearbyTableController animated:YES];
[tableController release];

والإفراج عن كائن المقرر أن autorelease ... يجب أن يكون الخطأ الأكثر شيوعا في إدارة الذاكرة. حذف هذا الخط [الإفراج tableController] حل المشكلة

نصائح أخرى

وأي حظ إذا قمت بتحديد @selector(refreshAction) عند إنشاء زر، أي بمعنى:.

UIBarButtonItem *rButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refreshAction)];

وربما لا يحصل حفظ الهدف إذا لم تقم بتحديد أيضا إجراءات لمهيئ.

وأنا لست بالضبط 100٪ متأكد لماذا لا يعمل التعليمات البرمجية الخاصة بك، ولكن وضع محدد مباشرة في منشئ يعمل:

UIBarButtonItem *rButton = [[UIBarButtonItem alloc] 
    initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh   
                         target:self 
                         action:@selector(refreshAction)];
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top