آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

کنترل صفحات TableView

enaderlou  9 سال پیش  9 سال پیش
0 0

با سلام و احترام

من یه table View دارم که مقدار آرایه ای که بهش میفرستم زیاده و متغیر ولی وقتی از تعداد ردیفهای یک صفحه بیشتر میشه نرم افزار کرش میکنه

البته اون مثال کشتی و الوارها رو دیدم و متوجه شدم که موضوع چیه ولی نمیدونم چطور داده هارو کنترل کنم و به مرور بفرستم به table view

این ارور رو دریافت میکنم:

fatal error: unexpectedly found nil while unwrapping an Optional value

+1 0
breakpoint بزارین توی line های مختلف و خط به خط بررسی کنین ببینین کدوم داده nil میشه و کرش میکنه. شاید به طور مستفیم اصلا ربطی به خود TableView هم نداشته باشه. (9 سال پیش)
0 0
اینکارو انجام دادم و مشکل خالی بودن داده هارو با یه شرط حل کردم ولی من یه مشکل با table view دارم اونم اینه که اولا : تا تمام داده هارو دانلود نکرده لود نمیشه ثانیا : نمیدونم با چه فانکشنی میشه کاری کرد که هر وقت tableView رو اسکرول میکنم حداکثر ده داده جلوتر لود بشه نه همگی با هم درواقع حلقه for من با count کنترل میشه و میخوام سرراهش بگم وقتی اسکرول میکنم شماره سلول جاری رو بگیرم و حلقه for رو +۱۰ تا اضافه تر دوباره تکرار کنم (9 سال پیش)
+1 0
واس مشکل اولتون کدتون رو قرار بدین. واس سوال دوم هم سرچ کنین Infinite UITableView یا Endless UITableView به نتیجه میرسین. (9 سال پیش)
+1 0
اینطوری نمیشه راهنمایی کرد. کدهاتون رو قرار بدید تا بشه کمکتون کرد. اینکه یکدفعه اطلاعات میاد توی لیست و باعث کرش برنامه میشه خیلی بعیده ! احتمالا مشکلا از جای دیگه ای هست ! (9 سال پیش)
 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
enaderlou  9 سال پیش
0 0

همونطور که میبینید هر بار که حلقه اجرا میشه مقدار جدید array  به مقدار قبلی اضافه میشه و دفعه بعد که اجرا میشه باز مقدار اول و دوم و سوم رو باهم میاره که همین موضوع باعث میشه وقتی count من ۱۰۰۰ باشه بجای اینکه با هر بار اجرا خونه های آرایه رو یکی یکی خروجی بده مثلا بجای اینکه خروجیش بشه A , B , C تا ۱۰۰۰ خونه برسه 

اینکارو میکنه A , AB , ABC , ABCD

حالا باید حلقه رو تغییر بدم یا میشه بجای .append از گزینه دیگه ای استفاده کنم؟

ممنون

 let someArray = jsonDictunary
let posts = someArray ["posts"] as! NSArray
let count = posts . count

for i in 0 ..< count

{
DispatchQueue.main.async(execute:{ () -> Void in

self.array.append (( posts [i] as! NSDictionary)["title"]as! String)

self.tableViewMain.reloadData()

})

}
  
 
پاسخ به سوال 
alfredo  9 سال پیش
+1 0

این کد رو جایگزین کنید ببینید فرقی میکنه ؟

 let someArray = jsonDictunary
let posts = someArray ["posts"] as! NSArray
let count = posts . count

DispatchQueue.main.async(execute:{ () -> Void in
self.array.removeAll()

for i in 0 ..< count
{
self.array.append (( posts [i] as! NSDictionary)["title"]as! String) // اگر اشکالی باشه قطعا در این خط هست
}

self.tableViewMain.reloadData()
})

 

 

0 0
ممنون از لطفتون ولی حل نشد فکر میکنم یا از .append هستش یا جایی که داریم از .append استفاده میکنیم (9 سال پیش)
+1 0
کافیه بعد از خط append. یک پرینت از آرایتون بگیرید تا از پر شدنش مطمين بشید. (9 سال پیش)
0 0
خب میگیرم که میبینم همون مشکل باقیه و داره بجای مقدار a , b , c بهم a , ab , abc بر میگردونه (9 سال پیش)
0 0
منظورم اينه كه شايد بايد بجاي append. از متد ديگه اي استفاده بشه (9 سال پیش)
پاسخ به سوال 
alfredo  9 سال پیش
+1 0

این یکی رو هم امتحان کنید:

 let someArray = jsonDictunary
let posts = someArray ["posts"] as! NSArray
let count = posts . count

DispatchQueue.main.async(execute:{ () -> Void in
self.array.removeAll()

for i in 0 ..< count
{
self.array[i] = (( posts [i] as! NSDictionary)["title"]as! String) // اگر اشکالی باشه قطعا در این خط هست
}

self.tableViewMain.reloadData()
})
0 0
ممنون از وقتی گذاشتید ولی بازم نشد و ارور داد اینبار حالا چاره ای نیست فعلا مجبورم از همون append. استفاده کنم (9 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .