Форум программистов, компьютерный форум CyberForum.ru

Мутирование массива - Swift - Swift

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Swift Как сделать подсчет правильных ответов в викторине? http://www.cyberforum.ru/swift/thread1511543.html
Здравствуйте программисты, нужна ваша помощь... Написала программу, что-то вроде викторины, если ответ правильный то выводит "True" если нет, то "False" не могу понять, как сделать подсчет "True" и "False"
Swift Обновление Annotation на MKMapView Добрый день подскажите как мне решить одну проблему: у меня есть динамический массив, с данными, которые я получаю с сервера, там координаты точек. Я вывожу аннотацию на карту, в соответствии с полученными координатами. Потом обновляю массив, и должен "обновить" мои аннотации, но в итоге у меня они просто ставятся. Как мне реализовать движущие "анотации"? массивы сохраняю в таком виде:... http://www.cyberforum.ru/swift/thread1503157.html
Как сделать эл-книжку для Андроид версии Swift
:cry: Доброго времени суток, буду краток не хочу отнимать время у вас... скажу в крации, Хочу отредактировать, или сделать программку, чтоб можно было просто добавлять разделы, и текста. Так сказать эл книжку для Андроид версии телефонов. Подскажите как можно это сделать, и на сколько это трудно? я в этом деле новенький) а желание очень большое т.к читаю очень много, и хочу сделать свою...
Swift Swift, what that?
Напишите мне, пожалуйста доступным языком, что такое свифт.
Swift Передать из UITableView в UIWebView http://www.cyberforum.ru/swift/thread1497194.html
Всем привет! Являюсь новичком Swift. Помогите, пожалуйста, передать данные из UITableView в UIWebView таким образом: lesson 1 -> откроет lesson1.html lesson 2 -> откроет lesson2.html "массив": arrayOfFiles = Никак не могу понять, не ругайтесь, прошу, помогите...
Swift Перевести код с as3 на swift? Приветствую, помогите пожалуйста перевести этот цикл созданный в as3 на swift смысл цикла заключается в следующем создаем новый спрайт, закидываем его в массв, потом раскидываем по сцене, получается как бы размноженный спрайтик. За ранее благодарю. for (var i:int = 0; i < 13; i++) { for (var j:int = 0; j < 12; j++) подробнее

Показать сообщение отдельно
Kennedy_SK
0 / 0 / 0
Регистрация: 05.04.2015
Сообщений: 20

Мутирование массива - Swift - Swift

11.08.2015, 15:27. Просмотров 645. Ответов 7
Метки (Все метки)

Доброго времени суток!
Столкнулся с проблемой, которую уже 3й день не могу решить:
Я отправляю запрос на сервер, и получаю данные, которые записываю в массив и вывожу на картку MapKit
т.е. есть "плавающие" аннотации.
Мой запрос к серверу выполняется таймером.

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
import UIKit
import MapKit
import CoreLocation
import AVFoundation
 
class AnnotationData: MKPointAnnotation {
    var status: String!
    var img: UIImage!
}
 
class Map: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate, OrderCancel, WaitCar, DriverInfo{
    // MARK - Variab.
    var locationManager = CLLocationManager()
    var data = GlobalData()
    var json = Json()
    var posClass = Position()
    var addr = Address()
    let regionRadius: CLLocationDistance = 1000
    var id: String = ""
    var check = true
    var checkdone = false
    var timer1 = NSTimer()
    var name: Array<String> = []
    var lon: Array<String> = []
    var longitude = []
    var lat: Array<String> = []
    var latitude = []
    var st: Array<String> = []
    var status: Array<String> = []
 
    
    //MARK - viewDidLoad
    override func viewDidLoad() {
        super.viewDidLoad()
        backgroundColor()
        locationManager.delegate = self
        myMap.delegate = self
        myMap.showsUserLocation = true
        self.json.ordCancel = self
        self.json.wait = self
        self.json.driverdelegate = self
        var start_coord = CLLocationCoordinate2D(latitude: data.start_latitude, longitude: data.start_longitude)
        if (locationManager.location != nil) {
            let coord = MKCoordinateRegionMakeWithDistance(locationManager.location.coordinate, regionRadius * 8.0, regionRadius * 8.0)
            myMap.setRegion(coord, animated: true)
        } else {
            let coord = MKCoordinateRegionMakeWithDistance(start_coord, regionRadius * 8.0, regionRadius * 8.0)
            myMap.setRegion(coord, animated: true)
        }
        timer1 = NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: Selector("GoData"), userInfo: nil, repeats: true)
        
    }
    
    //MARK - Request\use with timer ->
    func GoData () {
        json.URLDriver()
    }
 
    //MARK - Driver data
    func DriverData(string: String) {
//        println(string)
        if (string != "<s><br></s>") {
            var start = find(string, "n")
            let pos = distance(string.startIndex, start!)
            var newstr = string.substringFromIndex(advance(string.startIndex, pos + 6))
            var end = find(newstr, "/")
            let posend = distance(newstr.startIndex, end!)
            var nnstr = newstr.substringToIndex(advance(newstr.startIndex, posend - 5))
            var namearr: Array<String> = nnstr.componentsSeparatedByString("<br>")
            name = namearr.map { $0.substringToIndex(advance(find($0,"|")!, 0))}
            lon = namearr.map { $0.substringFromIndex(advance(find($0,"|")!, 1))}
            longitude = lon.map { $0.substringToIndex(advance(find($0,"|")!, 0))}
            lat = lon.map { $0.substringFromIndex(advance(find($0,"|")!, 1))}
            latitude = lat.map { $0.substringToIndex(advance(find($0,"|")!, 0))}
            st = lat.map { $0.substringFromIndex(advance(find($0,"|")!, 1))}
            status = st.map { $0.substringToIndex(advance(find($0,"|")!, 0))}
            
            var annotations: Array<AnyObject> = []
            var i = 0
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { () -> Void in
                var annotation = NSMutableArray()
                self.myMap.removeAnnotations(self.myMap.annotations)
                do {
                    var ann = AnnotationData()
                    
                    var coord: CLLocationCoordinate2D = CLLocationCoordinate2DMake(self.longitude[i].doubleValue, self.latitude[i].doubleValue)
                    var point: CGPoint!
                    var text: String!
                    ann.coordinate = coord
                    switch (count(self.name[i])) {
                    case 1:
                        text = self.name[i]
                        point = CGPointMake(22, 12.8)
                        break
                    case 2:
                        text = self.name[i]
                        point = CGPointMake(19.6, 12.8)
                        break
                    default:
                        text = self.name[i]
                        point = CGPointMake(16.5, 12.8)
                        break
                    }
                    switch (self.status[i]) {
                    case "1":
                        ann.status = "1.png"
                        ann.img = self.text(text, inImage: UIImage(named: "1.png")!, atPoint: point)
                        break
                    case "2":
                        ann.status = "2.png"
                        ann.img = self.text(text, inImage: UIImage(named: "2.png")!, atPoint: point)
                        break
                    default:
                        ann.status = "3.png"
                        ann.img = self.text(text, inImage: UIImage(named: "3.png")!, atPoint: point)
                        break
                    }
                    //                        self.myMap.addAnnotation(ann)
                    annotations.append(ann)
                    i++
//                    if (i == namearr.count) {
//                        namearr.removeAll(keepCapacity: false)
//                    }
                    
                } while (i < namearr.count)
                dispatch_async(dispatch_get_main_queue(), {
        
                    self.myMap.addAnnotations(annotations)
                })
            })
        } else {
            println("No car")//alert make
            timer1.invalidate()
        }
    }
    
    //MARK - Рисуем текст, который получаем при запросе, рисуем на картинку
    func text (drawText: NSString, inImage: UIImage, atPoint: CGPoint) -> UIImage {
        var textcolor: UIColor = UIColor.blackColor()
        var textfont: UIFont = UIFont(name: "Helvetica Bold", size: 10)!
        UIGraphicsBeginImageContext(inImage.size)
        let textattr = [NSFontAttributeName: textfont, NSForegroundColorAttributeName: textcolor]
        inImage.drawInRect(CGRectMake(0, 0, inImage.size.width, inImage.size.height))
        var rect: CGRect = CGRectMake(atPoint.x, atPoint.y, inImage.size.width, inImage.size.height)
        drawText.drawInRect(rect, withAttributes: textattr)
        var newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return newImage
    }
 
    //MARK - Map View ->
    func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
        let reuseID = "user_loc" //конкретная картинка для UserLocation
        var anView = myMap.dequeueReusableAnnotationViewWithIdentifier(reuseID) as? MKPinAnnotationView
        if (annotation is MKUserLocation) {
            anView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseID)
            anView!.image = UIImage(named: "usrlc.jpg")
            anView!.canShowCallout = true
            return anView!
        }
        
        let annData = annotation as! AnnotationData
        let reuseId = "pin"
        anView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
        if anView == nil {
            anView!.image = annData.img
            anView!.canShowCallout = true
        } else {
            anView!.image = annData.img
            anView!.canShowCallout = true
        }
            return anView
    }
    
    //MARK - Location Manager (user location) ->
    func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {      
        let location = CLLocationCoordinate2D(latitude: manager.location.coordinate.latitude, longitude: manager.location.coordinate.longitude)
        let coord = MKCoordinateRegionMakeWithDistance(location, regionRadius * 2.0, regionRadius * 2.0)
        myMap.setRegion(coord, animated: true)
 
    }
    
    //MARK - Error of search loc. data -??
    func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
//        println("Координаты не определены")
        alertError()
    }
    
    //->
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}
Работает все хорошо, НО вылетает ошибка (может вылететь через час использования программы, а может вылететь сразу)
Collection was mutated while being enumerated.
Т.е. он изменился пока перечислялся, как мне избавится от этого?
заранее спасибо!
Миниатюры
Мутирование массива - Swift  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru