Hi i am trying to parse a JSON string in iphone and so far i have been able to get JSON VALUE correctly
but after that i am geting an error:
-[__NSArrayM objectForKey:]: unrecognized selector sent to instance 0x62242e0
2011-08-16 16:11:58.792 BleepBleep[4083:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM objectForKey:]: unrecognized selector sent to instance 0x62242e0'
*** Call stack at first throw:
(
0 CoreFoundation 0x010a9be9 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x011fe5c2 objc_exception_throw + 47
2 CoreFoundation 0x010ab6fb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
3 CoreFoundation 0x0101b366 ___forwarding___ + 966
4 CoreFoundation 0x0101af22 _CF_forwarding_prep_0 + 50
5 BleepBleep 0x0000733f -[Screen1 network:didFinishLoadingWithRequest:data:] + 79
6 BleepBleep 0x0000b7e4 -[WNetwork handleResponse] + 323
7 BleepBleep 0x0000b69b -[WNetwork connectionDidFinishLoading:] + 36
8 Foundation 0x00077172 -[NSURLConnection(NSURLConnectionReallyInternal) sendDidFinishLoading] + 108
9 Foundation 0x000770cb _NSURLConnectionDidFinishLoading + 133
10 CFNetwork 0x01674606 _ZN19URLConnectionClient23_clientDidFinishLoadingEPNS_26ClientConnectionEventQueueE + 220
11 CFNetwork 0x0173f821 _ZN19URLConnectionClient26ClientConnectionEventQueue33processAllEventsAndConsumePayloadEP20XConnectionEventInfoI12XClientEvent18XClientEventParamsEl + 293
12 CFNetwork 0x0166ae3c _ZN19URLConnectionClient13processEventsEv + 100
13 CFNetwork 0x0166acb7 _ZN17MultiplexerSource7performEv + 251
14 CoreFoundation 0x0108b01f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
15 CoreFoundation 0x00fe928b __CFRunLoopDoSources0 + 571
16 CoreFoundation 0x00fe8786 __CFRunLoopRun + 470
17 CoreFoundation 0x00fe8240 CFRunLoopRunSpecific + 208
18 CoreFoundation 0x00fe8161 CFRunLoopRunInMode + 97
19 GraphicsServices 0x019de268 GSEventRunModal + 217
20 GraphicsServices 0x019de32d GSEventRun + 115
21 UIKit 0x002e442e UIApplicationMain + 1160
22 BleepBleep 0x00002018 main + 102
23 BleepBleep 0x00001fa9 start + 53
)
terminate called after throwing an instance of 'NSException'
Heres the code i am using in didFinishLoadingWithRequest
-(void)network:(WNetwork*)network didFinishLoadingWithRequest:(NSInteger)pReq data:(NSMutableDictionary*)pData
{
[self removeLoader];
switch (pReq) {
case JBJsonParser:
{
NSArray *parsedString = [pData objectForKey:#"placesname"];
DLog(#"LIST %#",parsedString);
}
break;
default:
break;
}
}
in the network class i am using dis code:
{
SBJSON *parser = [SBJSON new];
NSString *dataString = [[NSString alloc] initWithData:mRespData encoding:NSUTF8StringEncoding];
NSMutableDictionary *newDic = [dataString JSONValue];
if ([(id)mDelegate respondsToSelector:#selector(network:didFinishLoadingWithRequest:data:)]) {
[self.mDelegate network:self didFinishLoadingWithRequest:mReqType data:newDic];
}
[newDic autorelease];
[dataString release];
[parser release];
}
Little bit of JSON:
This is a JSON array:
["firstValue", "secondValue"]
This is a JSON dictionary:
{
"A key" : "A value",
"Another key" : "Another value"
}
Your JSON is telling the parser that the root type is an array. Therefore, jsonValue is returning an array.
You are trying to call objectForKey (NSDictionary method) on that array. That's why the exception was thrown.
Please post your JSON so we can see the structure and how you should parse it. Or, try logging the object you store jsonValue to.
UPDATE:
After reading your JSON, this is how you should parse it:
NSString *jsonString; // set this to your json
NSArray *places = [jsonString jsonValue];
// then iterate through the places, saving off the bits you need
for (NSDictionary *place in places) {
NSString *placeName = [place objectForKey:#"placesname"]; // for example
NSLog(#"Name of place: %#", placeName);
}
What you might want to do is create a custom class called place which has a property for lat, long, placename etc. and then save an array of those.
This post should help.
There are some good examples here:
http://iosdevelopertips.com/cocoa/json-framework-for-iphone-part-2.html
JSON syntax represents both arrays and dictionaries. When parsing an "unknown" piece of JSON code, you don't know whether a given "layer of the onion" is an array or dictionary, so you must check (at each level) to see what kind of object you have. Use [myObject isKindOfClass:[NSArray class]] and [myObject isKindOfClass:[NSDictionary class]].
It's also not unwise to do this checking even with "known" JSON sources, since web sites can break or change, and it's better to present a nice error message (and blame the web site) rather than have your app crash.
Related
I wanted to confirm that the following functionality is supported:
I have a simple app where I am trying to send an array of strings to UIActivityViewController. The array contains an attributed string and also a regular string. When I click on the share button and open the Mail app, I get a crash and error. However when I only send the attributed string by itself, it works.
I have tried this on IOS6 and it works fine on that.
Here is the configuration:
NSAttributedString *appName=[[NSAttributedString alloc] initWithString:#"TasteBank\n"
attributes:#{NSFontAttributeName : [UIFont boldSystemFontOfSize:[UIFont
systemFontSize]],NSForegroundColorAttributeName:[UIColor brownColor]}];
//crash seen when #"test" added to array without that no crash when mail app opened on ios7
NSMutableArray *dataToShare = [[NSMutableArray alloc ] initWithObjects: appName, #"test", nil];
UIActivityViewController* activityViewController =
[[UIActivityViewController alloc] initWithActivityItems:dataToShare applicationActivities:nil];
[self presentViewController:activityViewController animated:YES completion:^{}];
IS there something wrong with this? Is this configuration supported in IOS7? if so, could this be a bug?
I see the following error when I run on my iPhone 4 with IOS 7:
2013-10-17 11:43:50.609 testing12[2499:60b] -[NSConcreteMutableAttributedString appendString:]: unrecognized selector sent to instance 0x165ae670
2013-10-17 11:43:50.612 testing12[2499:60b] Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSConcreteMutableAttributedString appendString:]: unrecognized selector sent to instance 0x165ae670'
First throw call stack:
(0x2ff53f53 0x3a32c6af 0x2ff578e7 0x2ff561d3 0x2fea5598 0x32c389a1 0x328e2f2b 0x328e2bb1 0x328e2791 0x328e23b7 0x328e20dd 0x3284c101 0x3284c101 0x326f9601 0x326f468d 0x326c9a25 0x326c8221 0x2ff1f18b 0x2ff1e65b 0x2ff1ce4f 0x2fe87ce7 0x2fe87acb 0x34ba8283 0x32729a41 0xbd1ed 0x3a834ab7)
I see this error when run on IOS7.0 simulator in XCODE 5:
2013-10-17 11:23:42.054 testing12[3258:a0b] -[NSConcreteMutableAttributedString appendString:]: unrecognized selector sent to instance 0xa181470
2013-10-17 11:23:42.085 testing12[3258:a0b] Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSConcreteMutableAttributedString appendString:]: unrecognized selector sent to instance 0xa181470'
First throw call stack:
(0 CoreFoundation 0x017345e4 exceptionPreprocess + 180
1 libobjc.A.dylib 0x014b78b6 objc_exception_throw + 44
2 CoreFoundation 0x017d1903 -[NSObject(NSObject) doesNotRecognizeSelector:] + 275
3 CoreFoundation 0x0172490b forwarding___ + 1019
4 CoreFoundation 0x017244ee _CF_forwarding_prep_0 + 14
5 UIKit 0x008bdfa3 -[UIMailActivity prepareWithActivityItems:] + 2346
6 UIKit 0x008b9242 -[UIActivityViewController _executeActivity] + 424
7 UIKit 0x008ba824 -[UIActivityViewController _performActivity:] + 1359
8 libobjc.A.dylib 0x014c981f -[NSObject performSelector:withObject:] + 70
9 UIKit 0x0063c75a -[UIActivityGroupViewController collectionView:didSelectItemAtIndexPath:] + 148
10 UIKit 0x0083929b -[UICollectionView _selectItemAtIndexPath:animated:scrollPosition:notifyDelegate:] + 605
11 UIKit 0x008516d8 -[UICollectionView _userSelectItemAtIndexPath:] + 189
12 UIKit 0x00851895 -[UICollectionView touchesEnded:withEvent:] + 437
13 libobjc.A.dylib 0x014c9874 -[NSObject performSelector:withObject:withObject:] + 77
14 UIKit 0x00382f92 forwardTouchMethod + 271
15 UIKit 0x00383002 -[UIResponder touchesEnded:withEvent:] + 30
16 libobjc.A.dylib 0x014c9874 -[NSObject performSelector:withObject:withObject:] + 77
17 UIKit 0x00382f92 forwardTouchMethod + 271
18 UIKit 0x00383002 -[UIResponder touchesEnded:withEvent:] + 30
19 UIKit 0x0059dd7f _UIGestureRecognizerUpdate + 7166
20 UIKit 0x00268d4a -[UIWindow _sendGesturesForEvent:] + 1291
21 UIKit 0x00269c6a -[UIWindow sendEvent:] + 1030
22 UIKit 0x0023da36 -[UIApplication sendEvent:] + 242
23 UIKit 0x00227d9f _UIApplicationHandleEventQueue + 11421
24 CoreFoundation 0x016bd8af CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
25 CoreFoundation 0x016bd23b __CFRunLoopDoSources0 + 235
26 CoreFoundation 0x016da30e __CFRunLoopRun + 910
27 CoreFoundation 0x016d9b33 CFRunLoopRunSpecific + 467
28 CoreFoundation 0x016d994b CFRunLoopRunInMode + 123
29 GraphicsServices 0x036859d7 GSEventRunModal + 192
30 GraphicsServices 0x036857fe GSEventRun + 104
31 UIKit 0x0022a94b UIApplicationMain + 1225
32 testing12 0x00002efd main + 141
33 libdyld.dylib 0x01d70725 start + 0
34 ??? 0x00000001 0x0 + 1
)
I don't know if this will help but I fixed my problem with a custom activity provider that just gave a NSString to email types and the attributed string to all the others. The email controller autodetected that the string was HTML and formatted it correctly anyway.
I guess if you can get the same effect from HTML that you can with your attributed string this might help?
#implementation ProductActivityItemProvider
...
- (id)placeholderItem {
return [[NSAttributedString alloc] initWithString:#""];
}
- (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType {
if ([activityType isEqualToString:UIActivityTypeMail])
return [NSString stringWithFormat:#"I shared %#", self.product.title];
return nil;
}
- (id)item {
NSString *raw = [NSString stringWithFormat:#"<html><body>%#<br />%#<br /><b>%#</b></body></html>",
self.product.designer,
self.product.title,
self.product.price];
// The mail controller will (a) autodetect HTML and (b) crash if it's given an attributed string. sigh.
if ([self.activityType isEqualToString:UIActivityTypeMail])
return raw;
NSData *data = [raw dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *options = #{
NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute : #(NSUTF8StringEncoding)
};
NSAttributedString *text = [[NSAttributedString alloc] initWithData:data
options:options
documentAttributes:nil
error:nil];
return text;
}
#end
Got some fast solution here. Just implement a category:
#implementation NSMutableAttributedString (append)
-(void)appendString:(id)string{
if([string isKindOfClass:[NSString class]]){
[self appendAttributedString:[[NSAttributedString alloc] initWithString:string]];
}else if ([string isKindOfClass:[NSAttributedString class]]){
[self appendAttributedString:string];
}
}
#end
I am loading some values in UItableview from an array of dictionary values. I then alter the dictionary in the array by adding one more key value object as below
NSMutableDictionary *rowDict = [tableList objectAtIndex:arrayindex];
[rowDict setObject:#"download successfull" forKey:#"downloadstatus"];
but after this when I try retrieveing value from dictionary in the array as below
NSMutableDictionary *rowDict = [tableList objectAtIndex:arrayindex];
NSString *SelectedState = (NSString*)[rowDict objectForKey:#"downloadstatus"];
it crashes ... can any one help me out to fix this
this is the crash display on my consol
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSConcreteMutableData objectForKey:]: unrecognized selector sent to instance 0x61a8270'
*** Call stack at first throw:
(
0 CoreFoundation 0x003b0be9 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x015c15c2 objc_exception_throw + 47
2 CoreFoundation 0x003b26fb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
3 CoreFoundation 0x00322366 ___forwarding___ + 966
4 CoreFoundation 0x00321f22 _CF_forwarding_prep_0 + 50
5 SifyMyStorage 0x0003b35b -[DownloadListViewController tableView:cellForRowAtIndexPath:] + 314
6 UIKit 0x00ec67fa -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] + 634
7 UIKit 0x00ebc77f -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:] + 75
8 UIKit 0x00ed1450 -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] + 1561
9 UIKit 0x00ec9538 -[UITableView layoutSubviews] + 242
10 QuartzCore 0x009f4451 -[CALayer layoutSublayers] + 181
11 QuartzCore 0x009f417c CALayerLayoutIfNeeded + 220
12 QuartzCore 0x009ed37c _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 310
13 QuartzCore 0x009ed0d0 _ZN2CA11Transaction6commitEv + 292
14 QuartzCore 0x00a1d7d5 _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 99
15 CoreFoundation 0x00391fbb __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 27
16 CoreFoundation 0x003270e7 __CFRunLoopDoObservers + 295
17 CoreFoundation 0x002efbd7 __CFRunLoopRun + 1575
18 CoreFoundation 0x002ef240 CFRunLoopRunSpecific + 208
19 CoreFoundation 0x002ef161 CFRunLoopRunInMode + 97
20 GraphicsServices 0x02ead268 GSEventRunModal + 217
21 GraphicsServices 0x02ead32d GSEventRun + 115
22 UIKit 0x00e6142e UIApplicationMain + 1160
23 SifyMyStorage 0x000020b8 main + 102
24 SifyMyStorage 0x00002049 start + 53
)
terminate called after throwing an instance of 'NSException'
See if you have allocated the object and also get the count of dictionary , if the value is being added also see if u have declared NSmutabledictionary or just NSdictionary ... a view at your class having the code would be more helpful to sort out your problem
Ok, a couple things:
-the code you posted is fine. That's not the issue. The (NSString *) cast is unnecessary, but not an issue.
-there is an issue with your NSArray tablelist. If you are really adding only NSMutableDictionary to the array, then either you are doing that wrong, or your array is going out of scope and when you think you are accessing your array, you are accessing something else in memory at that location.
-How are you retaining your reference to tablelist within the controller?
-Change your second code block to this and I'll bet you find your problem (retainCount on one of these object == 0):
NSLog(#"retain count=%d",[tableList retainCount]);
NSMutableDictionary *rowDict = [tableList objectAtIndex:arrayindex];
NSLog(#"retain count=%d",[rowDict retainCount]);
NSString *SelectedState = [rowDict objectForKey:#"downloadstatus"];
you r not alloc the NSMutableDictionary so the NSMutableDictionary is empty and your app crashes.
NSMutableDictionary *rowDict = [[NSMutableDictionary alloc]init];
rowDict = [tableList objectAtIndex:arrayindex];
NSString *SelectedState = [rowDict objectForKey:#"downloadstatus"];
best of luck
when I call API and parse response xml, sometime I got this error ..
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSXMLParser stringByAppendingString:]: unrecognized selector sent to instance 0x6a22080'
*** Call stack at first throw:
(
0 CoreFoundation 0x014c7be9 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x012bc5c2 objc_exception_throw + 47
2 CoreFoundation 0x014c96fb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
3 CoreFoundation 0x01439366 ___forwarding___ + 966
4 CoreFoundation 0x01438f22 _CF_forwarding_prep_0 + 50
5 CityDeal24 0x0002520e -[CategoryXmlHandler parser:foundCharacters:] + 112
6 Foundation 0x001e8dd4 _characters + 235
7 libxml2.2.dylib 0x018371fb xmlParseCharData + 287
8 libxml2.2.dylib 0x01845a6f xmlParseChunk + 3730
9 Foundation 0x001e921a -[NSXMLParser parse] + 321
10 CityDeal24 0x00025030 -[CategoryXmlHandler parseXML:apiUrl:] + 444
11 CityDeal24 0x00004ac6 -[DagenDealsViewController downloadCategories] + 227
12 CityDeal24 0x00006708 -[DagenDealsViewController doInBackgroundWhenViewWillLoad] + 114
13 Foundation 0x0011ad4c -[NSThread main] + 81
14 Foundation 0x0011acd8 __NSThread__main__ + 1387
15 libSystem.B.dylib 0x9821c85d _pthread_start + 345
16 libSystem.B.dylib 0x9821c6e2 thread_start + 34
)
terminate called after throwing an instance of 'NSException'
Please check that, all the string data have values or not.
If some string value will be nil then you will get such error. So, include the condition for null value also.
As the error says, you are calling stringByAppendingString: on an NSXMLParser. Search your project for stringByAppendingString: and make sure you are calling it on a string.
Look like, you are calling stringByAppendingString method on the object of NSXMLParser.
EDITED:
I assume, you have declared currentElement in your .h as NSMutableArray and alloced that in init function like below.
currentElement = [NSMutableArray alloc] initWithCapacity:10];
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
[currentElement appendString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
NSLog(#"%#",string);
}
I am using UIImagePickerController to load saved photo from iphone library.
but when I scroll images up or down my application crashing..
I get following error:
2011-04-21 14:26:33.357 Exchange[72452:5803] Running conversion tracker in a background thread.
2011-04-21 14:26:40.449 Exchange[72452:207] upload from gallery event here
2011-04-21 14:26:42.277 Exchange[72452:207] *** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x6dc35a0> was mutated while being enumerated.(
"<PLImageTableSegment: 0x6937f80>",
"<null>",
"<null>",
"<null>",
"<null>",
"<PLImageTableSegment: 0x6937f80>",
"<PLImageTableSegment: 0x6937f80>",
"<PLImageTableSegment: 0x6937f80>",
"<PLImageTableSegment: 0x6937f80>",
"<PLImageTableSegment: 0x6937f80>",
"<PLImageTableSegment: 0x6937f80>",
"<PLImageTableSegment: 0x6937f80>"
)'
*** Call stack at first throw:
(
0 CoreFoundation 0x015645a9 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x016b8313 objc_exception_throw + 44
2 CoreFoundation 0x01564069 __NSFastEnumerationMutationHandler + 377
3 CoreFoundation 0x0155d838 -[__NSArrayM dealloc] + 152
4 PhotoLibrary 0x0608d696 +[PLImageTable releaseSegmentCache] + 37
5 PhotoLibrary 0x0606cf5a -[PLPhotoLibrary dealloc] + 183
6 CoreFoundation 0x0147b04c CFRelease + 92
7 CoreFoundation 0x014a018d _CFAutoreleasePoolPop + 237
8 Foundation 0x000e33eb -[NSAutoreleasePool release] + 167
9 UIKit 0x003943ee _UIApplicationHandleEvent + 8792
10 GraphicsServices 0x01d9c992 PurpleEventCallback + 1550
11 CoreFoundation 0x01545944 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
12 CoreFoundation 0x014a5cf7 __CFRunLoopDoSource1 + 215
13 CoreFoundation 0x014a2f83 __CFRunLoopRun + 979
14 CoreFoundation 0x014a2840 CFRunLoopRunSpecific + 208
15 CoreFoundation 0x014a2761 CFRunLoopRunInMode + 97
16 GraphicsServices 0x01d9b1c4 GSEventRunModal + 217
17 GraphicsServices 0x01d9b289 GSEventRun + 115
18 UIKit 0x00397c93 UIApplicationMain + 1160
19 ArmaniExchange 0x000022a4 main + 102
20 ArmaniExchange 0x00002235 start + 53
21 ??? 0x00000001 0x0 + 1
)
terminate c
alled after throwing an instance of 'NSException'
Thanks in advance.
I had the same problem. I tried he first answer here : UIImagePickerController crashes on rapid scrolling, slower than photos app
replacing
picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
by
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
It works like a charm now.
Open the releaseSegmentCache method of PLImageTable. You will find code similar to this:
for (id object in array) {
// do something with object
if ([object meetsCondition:#"Foo"]) {
[array removeObject:object];
}
}
But you are not allowed to change arrays when you are enumerating them. So you have to find another solution. You could save all objects that should be removed in another array, and then delete all those when you are done enumerating. Like this for example:
NSMutableArray *objectsToDelete = [NSMutableArray array];
for (id object in array) {
// do something with object
if ([object meetsCondition:#"Foo"]) {
[objectsToDelete addObject:object];
}
}
[array removeObjectsInArray:objectsToDelete];
Look for a for loop that adds or removes objects from whatever it is iterating through. Probably in [PLImageTable releaseSegmentCache]. For example:
for (NSString *string in stringsArray) {
[stringsArray removeObject:string];
}
i use this code to check if any objects exist in my NSMutableArray
if yes i remove them all but it crashes although there are objects why?
if([NSMutableArray1 count]==1)
{
[poemoptionslist removeAllObjects];
}
if ([NSMutableArray1 count]==0)
{
[poemoptionslist addObject: final1];
}
CONSOLE OUTPUT
2010-10-18 03:42:13.166
app1[33398:207] * Terminating app
due to uncaught exception
'NSInternalInconsistencyException',
reason: '-[__NSCFArray
removeObjectAtIndex:]: mutating method
sent to immutable object'
* Call stack at first throw: ( 0 CoreFoundation
0x02e55b99 exceptionPreprocess + 185
1 libobjc.A.dylib
0x02fa540e objc_exception_throw + 47
2 CoreFoundation
0x02e0e238 +[NSException
raise:format:arguments:] + 136 3
CoreFoundation
0x02e0e1aa +[NSException
raise:format:] + 58 4
CoreFoundation
0x02e4d3c1 -[__NSCFArray
removeObjectAtIndex:] + 193 5
CoreFoundation
0x02dfe973 -[NSMutableArray
removeAllObjects] + 83 6
poemsoflove
0x0004dc8d -[submitpoem submitpoem:] +
18560 7 UIKit
0x003b77f8 -[UIApplication
sendAction:to:from:forEvent:] + 119 8
UIKit
0x00442de0 -[UIControl
sendAction:to:forEvent:] + 67 9
UIKit
0x00445262 -[UIControl(Internal)
_sendActionsForEvents:withEvent:] + 527 10 UIKit
0x00443e0f -[UIControl
touchesEnded:withEvent:] + 458 11
UIKit
0x003db3d0 -[UIWindow
_sendTouchesForEvent:] + 567 12 UIKit
0x003bccb4 -[UIApplication sendEvent:]
+ 447 13 UIKit 0x003c19bf _UIApplicationHandleEvent +
7672 14 GraphicsServices
0x033e6822 PurpleEventCallback + 1550
15 CoreFoundation
0x02e36ff4
__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION
+ 52 16 CoreFoundation 0x02d97807 __CFRunLoopDoSource1 + 215
17 CoreFoundation
0x02d94a93 __CFRunLoopRun + 979 18
CoreFoundation
0x02d94350 CFRunLoopRunSpecific + 208
19 CoreFoundation
0x02d94271 CFRunLoopRunInMode + 97 20
GraphicsServices
0x033e500c GSEventRunModal + 217 21
GraphicsServices
0x033e50d1 GSEventRun + 115 22 UIKit
0x003c5af2 UIApplicationMain + 1160
23 poemsoflove
0x00002728 main + 102 24 poemsoflove
0x000026b9 start + 53 25 ???
0x00000001 0x0 + 1 ) terminate called
after throwing an instance of
'NSException' Program received signal:
“SIGABRT”.
Guys there is no NSArray!
I save to NSUSerdefaults like this:
if ([mutable1 count]==0)
{
[mutable1 addObject: final1];
}
NSUserDefaults *list =[NSUserDefaults standardUserDefaults];
[list setObject:mutable1 forKey:#"favorites"];
[list synchronize];
and i load data like this
NSUserDefaults *prefs1 =[NSUserDefaults standardUserDefaults];
if ( [prefs1 objectForKey:#"favorites"] != nil)
{
mutable1 = [[NSMutableArray alloc] init];
mutable1 = [prefs1 objectForKey:#"favorites"];
and i get the objects! then when it runs the removeallobjects it crashes!
mutable1 = [[NSMutableArray alloc] init];
mutable1 = [prefs1 objectForKey:#"favorites"];
Even though you've declared mutable1 to be an NSMutableArray, you are reassigning it to the object returned by your NSUserDefaults object. This object is apparently an NSArray rather than an NSMutableArray, hence the crash.
You can load your NSMutableArray with the preferences array by doing something like this:
mutable1 = [[NSMutableArray alloc] init];
[mutable1 addObjectsFromArray:[prefs1 objectForKey:#"favorites"]];
The error messages indicate that you're sending the message to an immutable array, which raises an exception. Uncaught exceptions lead to program termination.
How are you creating the array? The most common error that can lead to this is doing something like:
[mutableArray copy]
Even if the thing you're copying is mutable, the copy will be immutable. In that randomly chosen example, use mutableCopy insted.
Somewhere you have set NSMutableArray1 to an instance of NSArray, not NSMutableArray or you declared NSMutableArray1 as a property of type NSArray vs. NSMutableArray.
Also, you should follow Cocoa / Objective-C naming conventions. Namely, class names start with upper case; variables take the form myArray1 (or something more descriptive, preferably).