Я постараюсь, чтобы все было просто.Потеря данных в 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
На какой линии вы получаете "EXC_BAD_ACCESS"? Я думаю, ваш массив будет освобожден в вашем коде, прежде чем вы получите доступ к этому второму времени. – iphonedev23
Edit Scheme> Diagnostics> Enable Zombie Objects - это поможет вам определить, к какому объекту плохо обращаются. – bandejapaisa
Используйте self.allEventsData.count вместо allEventsData.count –