2016-12-18 2 views
0

У меня есть NSMutableArray, где хранятся объекты CLLocation из GPS. Проблема заключается в том, что o пытайтесь сохранить мой массив в объекте NSData, чтобы вставить его в базу данных sqlite. Объект NSData имеет значение nil. До недавнего времени мой код работал нормально. Я думаю, что после завершения обновления xcode. Snipset мой код выглядит следующим образом:Передача NSMutableArray в archivedDataWithRootObject return nil

@interface srTrackMeHome : UIViewController<CLLocationManagerDelegate>{ 
    CLLocationManager *locationManager; 
    NSMutableArray *myLocations; 
} 

на .m файл на кнопку мыши я запускаю следующую функцию:

- (IBAction)StartTrackMe:(id)sender { 
     myLocations=[[NSMutableArray alloc]init]; 
     . 
     . 
     . 
     . 
     . 
     [locationManager startUpdatingLocation]; 
} 


-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ 
. 
. 
. 
. 
[myLocations addObject:newLocation]; 

} 

и когда я закончил собирать мои пункты GPS я попробовать следующее (до этого момента я не могу видеть мой массив, который содержит данные):

NSData *routePointsFromArray = [NSKeyedArchiver archivedDataWithRootObject:myLocations];` 

вот где routePointsFromArray = ноль и несколько дней назад это работало.

Я что-то не хватает? Заранее спасибо!

+1

Вы наблюдали за протокалом NSCoding? – aircraft

+1

Опубликовать более релевантный код. На данный момент похоже, что вы никогда не инициализируете 'myLocations'. – rmaddy

+0

@aircraft Я прочитал, что и CLLocations и NSMutablearray соответствуют протоколу nscoding. Поскольку я сказал, что мой код работал и все еще работает на устройствах, у которых есть мое приложение, но мой код не работает после обновления моего xcode. –

ответ

0

Мне удалось решить проблему. Вышеприведенный код сохранил в базе данных мой массив, даже если я видел на xcode, который имеет значение nil (я действительно не знаю, почему xcode показывает значение nil). Проблема заключалась в том, что я извлек данные из базы данных. Проблема заключается в том, как xcode (я думаю) запускает «if {} else {}» код. Когда я получаю данные, мой код должен запускать только часть «если», но по какой-то причине также запускался код «else». Я разделил свою функцию на две новые. Один управляет кодом «if» и другим «else», и все работает нормально.

Я действительно благодарю вас за ваше время и ваши ответы.

0

Как указывает rmaddy, похоже, что вы никогда не инициализируете свой массив, поэтому вы «бросаете свои объекты местоположения на пол».

Вам нужно добавить строку, чтобы создать массив:

NSMutableArray *myLocations = [NSMutableArray new]; 

//Now you can create locations 
[myLocations addObject:newLocation]; //newLocation comes from locationManager 

В Objective-C вы можете отправить сообщение на ноль объекта, и он просто не может тихо, так что, когда вы не создали массив объект ваши звонки на addObject были просто проигнорированы.

+0

Я обновил свой первый пост с большим количеством моего кода. Мой код был в порядке и запускал как приложение, так и код. После обновления xcode мой код просто перестает работать, как он привык в этой конкретной позиции. –

0

Как я понимаю ваш код, вы добавляете объект newLocation в массив myLocations.

Итак, во-первых, newLocation - это ваш пользовательский класс модели, верно? Проверьте, реализуете ли вы NSCodingProtocol.

Во-вторых, Пожалуйста, проверьте способ didUpdateLocations, получил ответ от менеджера местоположения?

Если ответ не указан, пожалуйста, проверьте, что ваше конфиденциальное разрешение местоположения добавлено в файл info.plist.