سؤال

Three20 هي مكتبة رائعة. إنه يجعل العمل مع الجداول سهلة للغاية. لكن فجوة واحدة لاحظت - حذف الصفوف، مع الرسوم المتحركة. قضيت ساعات طويلة في محاولة القيام بذلك، وهذا ما أقوم به:

// get current index patch
UITableView* table = [super tableView];
NSIndexPath *indexPath = [table indexPathForSelectedRow];

//delete row in data source
TTListDataSource * source = (TTListDataSource *)self.dataSource;
[source.items removeObjectAtIndex:indexPath.row]; 

// delete row from the table, with animation
[table deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];

بعد تشغيل هذا الرمز، يظهر الخطأ: [Nscfarray ObjectatIntex:]: الفهرس (0) خارج الحدود (0)

أنا أستخدم الطبقة الموروثة من TTTableViewController. وأنا لا أقوم بتطبيق DataSourceScedLegate أو TableViewDelegate لأنني أستخدم ثلاثين أكبر قدر ممكن. لذلك، هذه هي الطريقة التي أقوم بإنشاء مصدر البيانات:

for(NSDictionary *album in (NSArray *)albums){

TTTableRightImageItem *item = [TTTableRightImageItem itemWithText:@"name"  
            imageURL:@"image url" 
           defaultImage:nil 
          imageStyle:TTSTYLE(rounded)
           URL:@"url of selector where I actually catch the tap on a row"];
[tableItems addObject:item];
}
self.dataSource = [TTListDataSource dataSourceWithItems:tableItems];

قرأت هذه المقالة (مقالة - سلعة) لكنه لا يساعد :(

لذلك، أعلم أن هذا بسيط للغاية بالنسبة ل Gurus من هذا الموقع. هل تستطيع أن تعطيني عينة متقدمة من كيفية القيام بذلك

شكرًا

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

المحلول

أول شيء أقوم به هو أنك تحذف صف من الجدول عندما لا يكون الجدول في وضع التحرير.

نصائح أخرى

أنا أيضا حصلت أيضا على "exc_bad_access" في model:didDeleteObject:atIndexPath: لكنني حصلت على حل هذه المشكلة.

لحذف صف في TTTableViewController تحتاج إلى تنفيذ tableView:commitEditingStyle: في تنفيذ مصدر البيانات الخاص بك مثل هذا:

- (الفراغ) الجدول الافتراضي: (ayitalview *) الجدولفيو CommetitionSteyle: (jimetviewcelleditingstyle) EditingStyle forrowatindExPath: (nsindexpath *) indexphath {if (enteringstyle == nsiewcelleditingstyledelete) {ideview code = [[self.Items enjoryatex: indexpath.section] ObjectatEns .صف]؛ [self.model diddeleteobject: كائن atindexpath: indexpath]؛ }}

تحتاج أيضا إلى التنفيذ tableView:willRemoveObject:atIndexPath: في مصدر البيانات الخاص بك:

- (nsindexpath *) tableview: (ulieview *) الجدول willremoveobject: (id) كائن atindexpath: (nsindexpath *) indexpath {// حذف الكائن [كائن deletefromdb]؛ >> RemoveItematIndExPath إرجاع نعم إذا تمت إزالة القسم إذا ([Self RemoveItematIndExPath: JUSTHPATH andSectionIstiMepty: نعم] } آخر {rettre indexpath؛ }}

الحيلة هي تغيير NSIndexPath تعود لا تحتوي فقط على القسم الذي يصبح فارغا. ثم يزيل التعليمات البرمجية في TTTableViewController القسم بدلا من الخلية.

هذر

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