iphone - Core Data issue. Insert new NSManagedObject -
i want insert 200 5mb records in core database. when save nsmanagedobject, memory wasn't released (autoreleased pool didn't help), , after inserting 30 records got memory warning , application crashed. here code
- (void)saveitem { nsstring *entityname = kentityname; appdelegate *appdelegate = [[uiapplication sharedapplication] delegate]; nsmanagedobjectcontext *context = appdelegate.managedobjectcontext; nsentitydescription *entitydesctiption = [nsentitydescription entityforname: entityname inmanagedobjectcontext:context]; // check if town exists nspredicate *predicate = [nspredicate predicatewithformat:@"id == %d", self.imageid]; nsfetchrequest *requesttocheckexistense = [[nsfetchrequest alloc] init]; [requesttocheckexistense setentity:entitydesctiption]; [requesttocheckexistense setpredicate:predicate]; nsarray *objects = [context executefetchrequest:requesttocheckexistense error:nil]; [requesttocheckexistense release]; if (objects == nil) { nslog(@"there error"); } nsmanagedobject *object; if ([objects count] > 0) { // edit item object = [objects objectatindex:0]; } else { // if object doesn't exist, find max id imlement autoincrement nsfetchrequest *request = [[nsfetchrequest alloc] init]; [request setentity:entitydesctiption]; request.propertiestofetch = [nsarray arraywithobjects: @"id", nil]; nsarray *allobjects = [context executefetchrequest:request error:nil]; [request release]; nsinteger newid = 1; if ([allobjects count] > 0) { nsnumber *maxid = [allobjects valueforkeypath:@"@max.id"]; newid = [maxid intvalue] + 1; } // write item object = [nsentitydescription insertnewobjectforentityforname:entityname inmanagedobjectcontext:context]; [object setvalue:[nsnumber numberwithint:newid] forkey:@"id"]; self.imageid = newid; } // fill nsmanagedobject // size of objnsdata 5mb nsmutabledata *objnsdata = [[databasemanager shareddatabasemanager] encrypteddatafromimage:bigimage]; [object setvalue:objnsdata forkey:@"big"]; [context save:nil]; } when commented
[object setvalue:objnsdata forkey:@"big"]; everything ok.
i tried add code @autoreleasepool , didn't help. know, now, when save data database, it's still in iphone ram. how release memory? when set of managed objects database, not in ram (i can easyly 100 object, each of them has 5mb fields)
object =(tblentity *) [nsentitydescription insertnewobjectforentityforname:entityname inmanagedobjectcontext:context];
try type cast object,this may solve problem
Comments
Post a Comment