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

ارور های مربوط به swift ۳

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

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

فککنم تا وقتی که سری جدید آموزشها برای سویفت ۳ آماده بشه این پست باز بمونه خیلی بدرد بخوره . ممنون میشم توجه ویژه ای به این پست داشته باشید

با تشکر

۱- میشه بفرمایید این ارور برای چیه؟ به هر شکل تغییرش میدم حل نمیشه

۲- ضمنا همین ارور اینجا هم هست انگار با swift 3 باید به شکل دیگه ای باشه

0 0
این مشکل ارتباطی با نسخه Swift 3 ندارد . (9 سال پیش)
 برای این سوال 10 پاسخ وجود دارد. مشاهده پاسخ صحیح
پاسخ به سوال 
کاشی زاده  9 سال پیش
0 0

این کد را به این شکل تغییر دهید :
بخش مربوط به تبدیل JSON در انتها به جای NSDictionary از [String:Any] استفاده کنید .

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

ممنون از پاسختون

ولی متاسفانه حل نشد

0 0
داده JSON که دریافت میکنید را قرار دهید تا بررسی شود . (9 سال پیش)
پاسخ به سوال 
enaderlou  9 سال پیش
0 0

این کدهای برنامه

 import UIKit

class ViewController2: UIViewController
{
//Our web service url
@IBOutlet weak var label: UILabel!

override func viewDidLoad()
{
let URL_GET_TEAMS = URL(string: "http://....ir/wp/api/get_tag_index")

// Do any additional setup after loading the view, typically from a nib.

let session = URLSession.shared
let task = session.dataTask(with: URL_GET_TEAMS!, completionHandler:
{ (data, response, error) -> Void in

do {

let teamJSON = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String:Any]
let statusCode = (response as! HTTPURLResponse).statusCode
print(statusCode)

let someArray = teamJSON
let posts = someArray ["tags"] as! NSArray
let statusName:String = posts [0]["title"] as! String

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

self . label . text = statusName

print (teamJSON)

})
}
catch
{
print("Error")
}
})

task.resume()
}

}

 
 

  اینم کدهای جیسون

{"status":"ok","count":5,"tags":[{"id":12,"slug":"%d8%a8%d8%b1%da%86%d8%b3%d8%a8-%d9%88%db%8c%da%98%d9%87",
"title":"\u0628\u0631\u0686\u0633\u0628 \u0648\u06cc\u0698\u0647","description":"","post_count":3},
{"id":8,"slug":"%d8%aa%d8%b3%d8%aa","title":"\u062a\u0633\u062a","description":"","post_count":2},
{"id":10,"slug":"%d8%aa%d8%b5%d9%88%db%8c%d8%b1","title":"\u062a\u0635\u0648\u06cc\u0631","description":"","post_count":1},
{"id":9,"slug":"%d8%b5%d8%af%d8%a7","title":"\u0635\u062f\u0627","description":"","post_count":1},
{"id":11,"slug":"%d9%81%d8%a7%db%8c%d9%84","title":"\u0641\u0627\u06cc\u0644","description":"","post_count":1}]}
 
 
پاسخ به سوال 
کاشی زاده  9 سال پیش
+3 0

 پاسخ صحیح

داده شما که قرار است از متغیر posts خوانده شود یک NSDictionary یا همان [String, Any]است .
پس باید قبل از خواندن آن و تبدیل به String آن را به NSDictionary تبدیل کنید :

let statusName = (posts[0] as! NSDictionary)["title"] as! String
 

از آنجا که شما آرایه ای از tag ها را دارید پس بهتر است از For استفاده کنید .

 

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

بسیار لطف کردید ممنون

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

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

من وقتي خروجي از jsone ميگيرم و پرينت هم ميكنم مشكلي نيست 

ولي وقتي ميخوام آرايه گرفته شده رو منتقلش كنم داخل   tableViewCell كه از  آرايه شماره 2 تغزيه ميشه ‏، نميشه و محتويات اوليه آرايه شماره 2 رو نشون ميده 

البته اروري هم نميده ولي گويا راه خاصي بايد داشته باشه تا از تابع جيسون اطلاعات رو پاس بديم به بيرون از تابع

ممنون ميشم راهنمايي بفرماييد

با تشكر

+2 0
قبل از ورود اطلاعات جدید به آرایه باید آرایه را خالی کنید از دستور removeAll استفاده کنید . (9 سال پیش)
پاسخ به سوال 
enaderlou  9 سال پیش
0 0

خیر این مشکل رو حل نکرد
در واقع من یه کلاس برای جیسون ایجاد کردم و وقتی میخوام خروجی رو از جیسون به صورت آرایه بگیرم نمیتونم
در داخل کلاس جیسون میتونم پرینت کنم آرایه جدید رو 
ولی وقتی میخوام از کلاس UIViewController اطلاعات آرایه جیسون رو بخونم مجبور شدم خارج از فانکشن خود جیسون آرایه جدیدی تعریف کنم و اونو مقدار اولیه بدم و بعد داخل فانکشن جیسون مقدار جدید بدم
بعد که میخوام مقدار دهی جدید رو در تکست باکس استفاده کنم مقدار اولیه آرایه رو میده
در صورتی که من با ()print میتونم اطلاعات جدید رو ببینم 
در ذیل کلاس مربوط به جیسون رو گذاشتم
 

 import UIKit
class JSON{
internal var URL_Json = URL(string: "http://....ir/wp/api/get_tag_index")
internal var str_someArray = "posts"
internal var str_somePosts = "title"
// private var array_Posts:Array = ["test1","test2"]
func json(str_someArray:String , str_somePosts:String) {
let session = URLSession.shared
let task = session.dataTask(with: URL_Json!, completionHandler:
{ (data, response, error) -> Void in
do {
let teamJSON = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String:Any]
let someArray = teamJSON
let posts = someArray [str_someArray] as! NSArray
let count = (posts . count)
for i in 0 ..< count
{
DispatchQueue.main.async(execute:{ () -> Void in
// self.array_Posts.append (( posts [i] as! NSDictionary)[str_somePosts]as! String)
var array_Posta:Array = ["test1", "test2"]
array_Posta.append (( posts [i] as! NSDictionary)[str_somePosts]as! String)
})
}
}
catch
{
print("Error")
}
})
task.resume()
}
}



 در واقع چطور در توابع مربوط به ویو کنترلر میشه از خروجی جیسون استفاده کرد؟ من به هر شکلی که به فکرم میرسید تست کردم ولی از جیسون نمیخونه 

نه count رو و نه محتویات آرایه رو

در توابع ذیل میخوام از جیسون استفاده کنم 

   func numberOfSections(in tableView: UITableView) -> Int {
}
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
}
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
}

 

+1 0
لطفا کد هاتون رو مرتب کنید و داخل تگ مربوطه قرار بدید . (9 سال پیش)
+1 0
درواقع کلاس شما یک Webservice Class هست ، کلاسی که به اینترنت وصل میشه و داده ای رو که JSON هست میخونه ، حالا شما برای بدست آوردن داده ها JSON باید از protocol استفاده کنید . در این خصوص آموزش Downloader را مطالعه کنید . (9 سال پیش)
پاسخ به سوال 
enaderlou  9 سال پیش
0 0

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

من قصدم ایجاد اپلیکیشنی برای یک وب سایت هست که بتونم تصاویر و مطالب اون رو استخراج کنم و ضمنا مواردی مثل عضویت و سفارش و ... هم داشته باشه 

برای چنین هدفی راهکار JSON  راهکار منطقی میتونه باشه؟؟؟

من قسمت دانلودرها رو مطالعه کردم بسیار مفید و کارامد و عالی توضیح داده شده ولی این مشکل من قسمت مزبور حل نمیشه اما همونطور که فرمودید قسمت protocol فکر میکنم درمان این موضوع باشه

من  خواستم ضمن ایجاد یک protocol و سعی در ارسال داده های کلاس Json  به protocol و دریافت اون درViewController مشکلم رو حل کنم ولی باز هم نشد

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

+1 0
سلام ، JSON یک استاندارد برای تولید متنی قابل درک برای سیستم هاست و فرقی نمیکنه شما بخواید آدرس فایلی رو برای دانلود تولید کنید یا داده ای رو از دیتابیس به صورت JSON در بیارید . مطمئنا اگر طبق روش دانلود عمل کنید مشکلتون حل میشه و اینکه نمیتونید داده ها رو بخونید به خطایی در کد شما بر میگرده . بهتره شبیه به کلاس دانلودر کلاسی برای وب سرویس ایجاد کنید و از Protcol ها نیز استفاده کنید . (9 سال پیش)
0 0
با سلام و احترام من داده ها رو ميخونم ولي صرفا با print چون آرايه من داخل متد قرار داره دستور print همونجا از مقدار جديد اجراميشه و صحيحه مشكل اينجاست كه نميتونم مقدار جديد آرايه اي كه داخل متد هستش رو از بيرون از كلاس در ويو كنترلر بخونمش ممنون از حوصله شما با تشكر (9 سال پیش)
+1 0
اینکه شما میتونید داده هاتون رو با دستور print ببنید مهم نیست چون print تنها کارش چاپ کردن است . اما برای استفاده از داده های دریافتی در برنامه باید ابتدا داده از نظر ساختار JSON استاندارد باشد و در صورتیکه کوچکترین خطایی مثل یک ویگول داخل آن باشد نمیتوانید از داده دریافتی استفاده کنید بعد از آن نوبت به خواندن صحیح داده ها میباشد که نیازمند بررسی دقیق داده ها و ترکیب آرایه ها و آبجکت های موجود در JSON است . (9 سال پیش)
0 0
ساختار جيسون استخراج شده رو دارم از اين آدرس فايل جيسون رو ميخونم لینک از posts تگ title همينم دقيقا خروجي ميده حالا اگه غلط دارم مسير رو ميرم كه خب فكر ميكنم بيشتر ازين مزاحمتون نبايد بشم اگه به جواب رسيدم در همين پست قرار ميدم مرسي از پاسختون و حوصله شما (9 سال پیش)
+1 0
ساختار JSON رو میتونید با ابزار های آنلاین بررسی کنید که در آموزشها نیز توضیح داده شده است . ساختاری که شما استفاده میکنید مشکلی ندارد پس مشکل در نحوه تبدیل داده ها به آرایه و آبجکت در Swift است . (9 سال پیش)
پاسخ به سوال 
enaderlou  9 سال پیش
0 0

 بله من آموزشهارو ديدم ساختار فايل جيسون هم صحيحه من كنترل روش دارم و نحوه تبدیل داده ها به آرایه و آبجکت در Swift رو انجام دادم و اون موضوع حله فقط همونطور كه قبلا عرض كردم مشكل من دریافت مقدار آرايه ايست كه داخل متوده و نميتونم از بيرون از كلاس جيسونم بهش دسترسي داشته باشم آرايه من اسمش array_Posta همونطور كه در كلاس زير ميبينيد داخل متد تعريف شده
 import UIKit
class JSON{
internal var URL_Json = URL(string: "http://logowall.ir/wp/api/get_posts/")
internal var str_someArray = "posts"
internal var str_somePosts = "title"
// private var array_Posts:Array = ["test1","test2"]
func json(str_someArray:String , str_somePosts:String) {
let session = URLSession.shared
let task = session.dataTask(with: URL_Json!, completionHandler:
{ (data, response, error) -> Void in
do {
let teamJSON = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String:Any]
let someArray = teamJSON
let posts = someArray [str_someArray] as! NSArray
let count = (posts . count)
for i in 0 ..< count
{
DispatchQueue.main.async(execute:{ () -> Void in
// self.array_Posts.append (( posts [i] as! NSDictionary)[str_somePosts]as! String)
var array_Posta:Array = ["test1", "test2"]
array_Posta.append (( posts [i] as! NSDictionary)[str_somePosts]as! String)
})
}
}
catch
{
print("Error")
}
})
task.resume()
}
}
 
 
 
+1 0
درسته ، اگر مشکلی در تبدیل داده ها ندارید و تنها مشکلتون دریافت داده ها در کلاسی دیگر است . راه حل را پیشتر عرض کردم ، آیا از روشی که گفتم استفاده کردید ؟ (9 سال پیش)
0 0
بله استفاده کردم ولی همچنان نمیتونم حتی با protocol هم داده ها رو از داخل متد داخلی کلاس دریافت کنم البته اون آرایه رو مستقیما داخل کلاس تعریف کردم که بتونم بهش از بیرون کلاس دسترسی داشته باشم ولی همونظور که عرض کردم مشکلش اینه که وقتی مقداردهیش میکنم از متد . فقط میتونم مقدار اولیه رو از بیرون دریافت کنم نه مقدار جدید رو که از متد بهش دادم (9 سال پیش)
0 0
من فقط دنبال راهی هستم که بتونم از کلاس شماره ۲ به متغییر داخل متد کلاس ۱ دسترسی داشته باشم (9 سال پیش)
+1 0
خب راه حل همونی که هست که عرض کردم شما یا باید از protocol استفاده کنید یا باید از Closure استفاده کنید که روش استفاده از Protocol و Closure در آموزش ها وجود دارد . شما طبق آموزش ها کلاس رو بسازید بعد هر جا مشکل بر خوردید در انجمن مطرح کنید . میتونید برای این موضوع یک تاپیک مجزا باز کنید . (9 سال پیش)
پاسخ به سوال 
شهریار توکلی  9 سال پیش
0 0

درود خدمت دوستان . من بعد از به روز رسانی xcode سیستمم به آخرین نسخه و بالا آوردن پروژه روی swift 3 وقتی پروژه رو باز کردم با #وارنینگ های زیادی در قسمت گرافیکی برخورد کردم که برخی هاشون اصلا ربطی مثلا به موارد دستی ندارند مثلا روی ( نویگیشن کنترلر ) ارور وارنینگ دارد . در صورتی که اصلا این بخش توش گرافیک نمی ره که من دست زده باشم و هرچی روی اون مثلث زرد می زنم و فیکس فریم می کنم این مشکل حل نمی شه این ارور در سراسر پروژه من متسفانه پیدا شده که در صورت کمک دوستان بتونم حلش کنم کمک بسیار زیادی بهم می شه

پروژه من خیلی بزرگ شده و اینکه از اول بزنمش خیلی سخت می شه مخصوصا تمام تلاشم روی بخش گرافیکش بود که واقعا هم زیبا شده و الان نمی دونم باید باهاش چیکار کنم این همه وارنینگ گرافیکی مربوط به اینترفیس حل بشه.

 

تذکر : اگر مثل من تو نسخه قبلی تمام اسکچ بخش هایی که باید درست بکنین رو روی خود xcode انجام دادید و اون بخش ها به بخش های دیگر مرتبط نیست یا همان خالی هست باید بگم بعد از به روز رسانی خود xcode پاکش می کنه  متاسفانه

0 0
دوستان کسی نظری در مورد مشکل من نداره ؟ (9 سال پیش)
0 0
احتمالا داره نسخه ای که نصب کردید بتا بوده و دارای باگ باشه و یا چیزی که در نسخه قدیمی پیاده کردید در نسخه جدید نیاز به بروزرسانی داشته باشد اما چون این بروزرسانی ضروری نیست تنها به شما وارنینگ نمایش داده میشود . (9 سال پیش)

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