2012-01-16 2 views
0

Я постараюсь, чтобы все было просто.Потеря данных в NSMutableArray Сохранение объектов

.h 

NSMutableArray *allEventsData; 
@property (nonatomic, retain) NSMutableArray *allEventsData; 

.m 


-(void) test { 
     DAL *db = [[DAL alloc] init] 

     self.allEventsData = [[NSMutableArray alloc] initWithArray:[db readUniversityEvents]]; 

     //to test 

     for(int i = 0; i < [allEventsData count]; i++) { 
      UniversityEvents *obj = (UniversityEvents*)[self.allEventsData objectAtIndex:i]; 
      NSLog(@"%@", obj.eventId); 

     } 
} 

Теперь, прекрасно работает, однако второй этот метод недействительным остается, я никогда не могу получить доступ к нему снова, граф свойство показывает, что есть еще такое же количество записей, однако если я пытаюсь для цикла , он просто вырвется, и я получу сигнал, полученный программой: «EXC_BAD_ACCESS»

Я немного расплывчато, но я надеюсь на некоторые предложения относительно того, почему это происходит.

Благодаря

PS Если бы ввести, чем вручную, поэтому не обращайте внимания на возможные орфографические ошибки.

Редактирование: просто для того, чтобы уточнить, я храню массив объектов в новом массиве, может ли быть, что allEventsData просто указывает на эти объекты и не сохраняет копию? Это могло бы объяснить плохое исключение доступа

EDIT 2:

FYI из-за моих подозрений выше, я также попытался следующие, но я получаю SIGABRT исключение, в настоящее время ищет в раствор

self.allEventsData = [[NSMutableArray alloc] initWithArray:[db readUniversityEvent] copyItems:YES]; 

Лог:

-[UniversityEvents copyWithZone:]: unrecognized selector sent to instance 0xdd17f50 
2012-01-16 12:13:17.789 sqliteDemo[1211:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UniversityEvents copyWithZone:]: unrecognized selector sent to instance 0xdd17f50' 
*** Call stack at first throw: 
(
    0 CoreFoundation      0x00f905a9 __exceptionPreprocess + 185 
    1 libobjc.A.dylib      0x010e4313 objc_exception_throw + 44 
    2 CoreFoundation      0x00f920bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187 
    3 CoreFoundation      0x00f01966 ___forwarding___ + 966 
    4 CoreFoundation      0x00f01522 _CF_forwarding_prep_0 + 50 
    5 CoreFoundation      0x00ef0dca -[NSObject(NSObject) copy] + 42 
    6 CoreFoundation      0x00f8bff2 -[NSArray initWithArray:range:copyItems:] + 290 
    7 CoreFoundation      0x00ef3e33 -[NSArray initWithArray:copyItems:] + 99 
    8 sqliteDemo       0x000030f4 -[sqliteDemoViewController displayData] + 242 
    9 sqliteDemo       0x00002e30 -[sqliteDemoViewController updateData] + 427 
    10 UIKit        0x003e64fd -[UIApplication sendAction:to:from:forEvent:] + 119 
    11 UIKit        0x005f8cc3 -[UIBarButtonItem(UIInternal) _sendAction:withEvent:] + 156 
    12 UIKit        0x003e64fd -[UIApplication sendAction:to:from:forEvent:] + 119 
    13 UIKit        0x00476799 -[UIControl sendAction:to:forEvent:] + 67 

UniversityEvents (это объект, который хранится внутри класса) .h

@interface UniversityEvents : NSObject { 

} 


@property (assign) NSString * eventID; 
@property (retain) NSString * title; 
@property (retain) NSString * url; 
@property (retain) NSString * category; 
@property (retain) NSString * date; 
@property (retain) NSString * startTime; 
@property (retain) NSString * endTime; 
@property (retain) NSString * department; 
@property (retain) NSString * location; 
@property (retain) NSString * description; 
//@property (assign) NSInteger * attending; 

-(id) initWithData :(NSString *) _eventID :(NSString *) _title :(NSString *)_url :(NSString *)_category :(NSString *)_date 
        :(NSString *)_startTime :(NSString *) _endTime :(NSString *)_department :(NSString *)_location 
        :(NSString *) _description; 

@end 

.m @synthesize с кодом события, название, URL, категория, дата, начальное время, время окончания, отдел, местоположение, описание;

-(id) initWithData :(NSString *) _eventID :(NSString *) _title :(NSString *)_url :(NSString *)_category :(NSString *)_date 
        :(NSString *)_startTime :(NSString *) _endTime :(NSString *)_department :(NSString *)_location 
        :(NSString *) _description 
{ 

    self = [super init]; 
    if(self) 
    { 
     self.eventID = _eventID; 
     self.title = _title; 
     self.url = _url; 
     self.category = _category; 
     self.date = _date; 
     self.startTime = _startTime; 
     self.endTime = _endTime; 
     self.department = _department; 
     self.location = _location; 
     self.description = _description; 
     //self.attending = _attending; 
    } 

    return self; 
} 

@end 
+0

На какой линии вы получаете "EXC_BAD_ACCESS"? Я думаю, ваш массив будет освобожден в вашем коде, прежде чем вы получите доступ к этому второму времени. – iphonedev23

+0

Edit Scheme> Diagnostics> Enable Zombie Objects - это поможет вам определить, к какому объекту плохо обращаются. – bandejapaisa

+0

Используйте self.allEventsData.count вместо allEventsData.count –

ответ

1

Изменение

@property (assign) NSString * eventID; 

в

@property (retain) NSString * eventID; 
+1

Я просто хочу запустить перед собой автомобиль прямо сейчас. – Ash

0

Существует разница между [allEventsData count] (доступ к Ивар) и self.allEventsData (доступ к свойству). Кроме того, вы регистрировали каждый элемент UniversityEvents? Если один из них равен нулю, вы не можете получить доступ к своему свойству eventId. Мы, возможно, потребуется больше кода, может быть, от метода readUniversityEvents

+0

Хороший улов, просто попробовал.self и получить EXC_BAD_ACCESS, как упоминалось выше, я постараюсь выслать еще немного кода в ближайшее время. – Ash

+0

Вы обновляетесь, потому что используете 'copyItems: YES', но не реализуете' copyWithZone' в вашем 'UniversityEvents'. Перед выполнением 'copyItem', вы можете показать, что разрывная строка/строка/строка сообщения обрывается? –

+0

Я сейчас внедрил copyWithZone, я просто получаю EXC_BAD_ACCESS на любой строке кода, которая пытается получить доступ к массиву, например NSLog (@ "% @", [self.allEventsData count] или получение объекта и т. Д. И т. Д. – Ash

Смежные вопросы