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

استفاده از متغیری که داخل متد یک کلاس قراردارد  در ViewController

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

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

مدتیست قصد دارم از متغییری بنام TitrMainNews که داخل متدی در کلاس JsonClass قرار دادم در ViewController استفاده کنم ولی متاسفانه هر کدوم از آموزشهارو مطالعه کردم نتونستم به جواب برسم و همچنان بهش دسترسی ندارم

کلاس مربوطه رو در ذیل قرار میدم 

 import UIKit
class JsonClass{
var URLJson = URL(string: "http://logowall.ir/wp/api/get_posts")
var strPosts = ""
var strTitle = ""
internal func funcJson(strPosts:String , strTitle:String) {
let session = URLSession.shared
let task = session.dataTask(with: URLJson!, completionHandler:
{ (data, response, error) -> Void in
do {
let teamJSON = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String:Any]
let jsonArray = teamJSON
let posts = jsonArray [strPosts] as! NSArray
let count = (posts . count)
for i in 0 ..< count
{
var TitrMainNews : String = ""
DispatchQueue.main.async(execute:{ () -> Void in
TitrMainNews.append (( posts [i] as! NSDictionary)[strTitle]as! String)
})
}
}
catch
{
print("Error")
}
})
task.resume()
}
}

 

ضمنا همونطور که مطلعید میخوام در تابع ذیل که از توابع ViewController هست این متغییر رو استفاده کنم

   func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
let LetCellMainNews = tableView.dequeueReusableCell(withIdentifier: "CellMainNews", for: indexPath) as! TVCMainNews
let JsonClassObject = JsonClass()
JsonClassObject.funcJson(strPosts: "posts", strTitle: "title")
LetCellMainNews .labelTitrCellMainNews .text = ??????????????
return LetCellMainNews
}
 برای این سوال 7 پاسخ وجود دارد. مشاهده پاسخ صحیح
پاسخ به سوال 
کاشی زاده  7 سال پیش
+1 0

سلام ،
متغیری که شما ایجاد کردید با نام TitrMainNews  داخل حلقه for تعریف شده پس از بیرون دیده نمیشه برای اینکه از بیرون دیده بشه باید به یک property تبدیلش کنید .

در نهایت ، ابتدا باید یک نمونه از روی کلاستون بسازید و سپس از متغیر استفاده کنید .

پاسخ به سوال 
enaderlou  7 سال پیش
0 0

من  این متغییر رو به بیرون از حلقه و به صورت property  هم قرار دادم و همونطور که در پست قبلی میبینید نمونه هم میسازم ولی یا مقدار قبل از حلقه رو برمیگردونه یا کلا بهش دسترسی ندارم

البته شاید در ViewController این مشکل برام ایجاد میشه 

+1 0
الان داخل کدی که قرار دادید متغیر داخل حلقه هست ، لطفا آخرین تغییرات را قرار دهید . فراموش نکنید برای دسترسی متغیر خارج از کلاس باید متغیر به شکل یک پراپرتی تعریف شود . (7 سال پیش)
پاسخ به سوال 
enaderlou  7 سال پیش
0 0


import UIKit
class JsonClass{
var URLJson = URL(string: "http://logowall.ir/wp/api/get_posts")
var strPosts = ""
var strTitle = ""
var TitrMainNews : String = "a"
internal func funcJson(strPosts:String , strTitle:String)->String {
let session = URLSession.shared
let task = session.dataTask(with: URLJson!, completionHandler:
{ (data, response, error) -> Void in
do {
let teamJSON = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String:Any]
let jsonArray = teamJSON
let posts = jsonArray [strPosts] as! NSArray
let count = (posts . count)
for i in 0 ..< count
{

DispatchQueue.main.async(execute:{ () -> Void in
self.TitrMainNews.append (( posts [i] as! NSDictionary)[strTitle]as! String)
})

}
}
catch
{
print("Error")
}

})
task.resume()
return TitrMainNews

}

}

 
0 0
لطفا ابتدا کد ها را reformat کنید بعد داخل تگ مربوطه قرار دهید تا خوانا باشد . (7 سال پیش)
0 0
کدها اصلاح شد (7 سال پیش)
0 0
همونطور که مشاهده میکنید مقدار اولیه متغیر مربوطه رو " a " قراردادم که وقتی خروجی میگیرم بجای مقدار استخراج شده در loop همون مقدار اولیه رو یعنی همون " a " رو برمیگردونه (7 سال پیش)
پاسخ به سوال 
کاشی زاده  7 سال پیش
+1 0

 پاسخ صحیح

زمانی که در حال برقراری ارتباط با سرور هستید نمیشه از Return استفاده کرد و باید مثل آموزشی که در خصوص دانلود است یا از Protocol یا Closure استفاده کنید .
اینکه کی سرور شما جواب درخواست کلاینت رو بده مشخص نیست پس باید در زمان گرفتن پاسخ داده را چاپ کنید .

0 0
باسلام و احترام ضمن تشكر از وقتي كه در اختيار ما قرارداديد من بالاخره تونستم با استفاده از آموزشهاي دانلودر متون و تصاوير رو از جيسون دريافت كنم و دانلود كنم و نمايش هم بدم فقط يه مشكل داره تا زماني كه صفحه اسكرول نميشه فقط متون قابل رويت هست و تصاوير به محض اسكرول كردن ديده ميشه (7 سال پیش)
+1 0
سلام ، زمانی که شما اسکرول انجام میدید تازه Imageview داخل صفحه رندر میشه و به همین دلیل متد دانلود تصویر در این لحظه اجرا میشود . (7 سال پیش)
0 0
يعني راهي نداره؟ شما در مثالتون قبل از اسكرول تصاوير رو مشاهده ميكرديد (7 سال پیش)
+1 0
شما از Tableview استفاده کردید ؟ یا ScrollView ؟ (7 سال پیش)
0 0
از ViewController كه قاعدتا داخلش سلولي دارم كه يه uiimage قراردادم (7 سال پیش)
0 0
TableViewCell (7 سال پیش)
0 0
این خاصیت TableView هست و یک امکان هست نه مشکل اگر آموزش Table View را مطالعه کنید در خصوص این موضوع با مثال کشتی توضیحات لازم داده شده است . (7 سال پیش)
0 0
براي تصاوير لود انجام نميشه ولي براي متون ميشه (7 سال پیش)
0 0
متوجه منظورتون از لود نمیشم، منظور من از لود تصاویر به این منظور هست که ، زمانی که اسکرول انجام میشه و آیتم داخل صفحه نمایش داده میشه اگر دستوراتی برای load عکس از سرور نوشته باشید صدا زده میشه و تا قبل از اون هیچ تصویری از سرور دریافت نمیشه . (7 سال پیش)
0 0
در واقع من در فولدر ساخته شده ميبينم تصاوير دانلود شده ولي تا زماني كه صفحه رو اسكرول نكردم فقط متن رو نشون ميده ولي به محض اسكرول كردن تازه تصاوير رو نشون ميده. (7 سال پیش)
0 0
تصویری از بخشی که در موردش صحبت میکنید قرار بدید تا دقیق تر بشه بررسی کرد . (7 سال پیش)
پاسخ به سوال 
enaderlou  7 سال پیش
0 0

  

سمت راست بعد از اسکرول است و سمت چپ قبل از اسکرول

پاسخ به سوال 
enaderlou  7 سال پیش
0 0

به زمان انتظار هم ربطی نداشت و تا اسکرول نمیکنم تصاویر مشاهده نمیشه

+1 0
اگر صبر کردید و باز هم لود نشده و تنها در شرایط اسکرول شدن عکس نمایش داده میشود ، پس باگی در کد وجود دارد در جایی که کد دانلود تصویر رو قرار دادید یک دستور print قرار بدید و ببنید کی چاپ انجام میشود . (7 سال پیش)
پاسخ به سوال 
enaderlou  7 سال پیش
0 0

بله درسته ‏ 

بعد از بررسي متوجه شدم دانلود ‏  بعد از ساختن سلول انجام ميشه و بايد مجددا بازخواني بشه

البته گويا reloadData() رو نميشه در تابع مرتبط با سلول استفاده كنم 

+1 0
درستش هم همین هست باید بعد از ساخت سلول تصاویر دانلود بشوند اما باید در انتها دانلود عکس دانلود شده را در ImageView مربوطه لود کنید . (7 سال پیش)
0 0
همين كارو كردم بعد از resume كردن task تصوير رو در uiimage لود كردم (7 سال پیش)
+1 0
اشتباه هست ، عکس باید زمانی لود بشه که دانلود شده ، آموزش ها رو دقیق تر مطالعه کنید . (7 سال پیش)

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