केवल डिवाइस पर ऐप चलाने पर समस्या को क्रैश करना

तो मेरे पास एक बहुत ही अजीब मुद्दा है जिसमें जब मैं सिम्युलेटर पर अपना ऐप चलाता हूं और आईपैड प्लग इन करता है (केबल प्लग के साथ डिवाइस पर ऐप चला रहा है) यह सब ठीक काम करता है। हालांकि डिवाइस पर प्लग करने के बाद डिवाइस पर चलने के बाद और मैंने ऐप का उपयोग करने की कोशिश की, यह दुर्घटनाग्रस्त हो गया .. डिवाइस क्रैश लॉग को देखने का प्रयास किया और मैं देख रहा हूं:

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                 0x3672bf78 objc_msgSend + 16
1   App                     0x000ca834 -[AHAppImageData dealloc] (AHInstagramImageData.m:122)
2   libobjc.A.dylib                 0x3672d16e _objc_rootRelease + 30
3   CoreFoundation                  0x33d792e0 CFRelease + 88
4   CoreFoundation                  0x33d8ea30 -[__NSArrayM removeObjectAtIndex:] + 288
5   CoreFoundation                  0x33d84adc -[NSMutableArray removeAllObjects] + 64
6   App                     0x000f717e -[AHImageDataSource clearDataSource] (AHImageDataSource.m:53)
7   App                     0x000c0a36 __49-[AHMainViewController loadRequestWithURLString:]_block_invoke_0 (AHMainViewController.m:91)
8   libdispatch.dylib               0x32658c52 _dispatch_call_block_and_release + 6
9   libdispatch.dylib               0x3265aee0 _dispatch_main_queue_callback_4CF$VARIANT$mp + 188
10  CoreFoundation                  0x33e032a6 __CFRunLoopRun + 1262
11  CoreFoundation                  0x33d8649e CFRunLoopRunSpecific + 294
12  CoreFoundation                  0x33d86366 CFRunLoopRunInMode + 98
13  GraphicsServices                0x37d68432 GSEventRunModal + 130
14  UIKit                           0x36820cce UIApplicationMain + 1074
15  App                     0x000b2860 main (main.m:16)
16  App                     0x000b2820 0xb1000 + 6176

कोई विचार क्यों यह डिवाइस पर ही हो रहा है और जब प्लग इन या सिम्युलेटर में ऐप चलाया जाता है?

नीचे दी गई टिप्पणी के आधार पर, मैं उस कोड को दिखा रहा हूं जो इसके लिए ज़िम्मेदार है:

 [[AHMyAppAPIClient sharedClient] getPath:requestURLPath parameters:nil 
             success:^(AFHTTPRequestOperation *operation, id response) {
                 [self.progressHUD_ hide:YES];


                 self.nextPaginationURL_ = [[response valueForKey:@"pagination"] valueForKey:@"next_url"];

                 [self.collectionView_.pullToRefreshView stopAnimating];
                 [[NSOperationQueue sharedOperationQueue] cancelAllOperations];


                 NSArray *arr = [response valueForKey:@"data"];
                 if ([arr count] > 0){
                     [[AHImageDataSource sharedDataSource] clearDataSource];
                 }


                for (NSDictionary * data in arr){
                     AHInstagramImageData * imgData = [[AHInstagramImageData alloc] initWithData:data];
                     [[AHImageDataSource sharedDataSource] addObject:imgData];
                     [imgData release];
                 }


                 dispatch_async(dispatch_get_main_queue(), ^{
                     [self.collectionView_ setContentOffset:CGPointMake(0, 0)];
                     [self.collectionView_ reloadData];

                 });

             }
             failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                 [self.progressHUD_ hide:YES];
                 NSLog(@"Error fetching user data!");
                 NSLog(@"%@", error);      

             }];

इस तरह मैं डेटा स्रोत की स्थापना कर रहा हूँ:

extern NSString * const kClearDataSource;

@interface AHImageDataSource : NSObject
+ (AHImageDataSource *)sharedDataSource;
- (void) clearDataSource;
- (void) addObject:(id) object;
- (void) addObject:(id)object atIndex:(int) index;
- (int) count;
- (id) objectAtIndex:(int) index;
@end


NSString * const kClearDataSource = @"clearDataSource";

@interface AHImageDataSource()
{
    NSMutableArray * imageDataSource_;
}

@property (nonatomic, retain) NSMutableArray * imageDataSource_;

@end

@implementation AHImageDataSource
@synthesize imageDataSource_;

+ (AHImageDataSource *)sharedDataSource {
    static AHImageDataSource *_sharedClient = nil;
    static dispatch_once_t oncePredicate;
    dispatch_once(&oncePredicate, ^{
        _sharedClient = [[self alloc] init];
    });

    return _sharedClient;
}


- (id)init {
    self = [super init];
    if (!self) {
        return nil;
    }

    NSMutableArray * temp = [[NSMutableArray alloc] initWithCapacity:200];
    self.imageDataSource_  = temp;
    [temp release];


    return self;
}

-(void) clearDataSource
{
    if ([self.imageDataSource_ count] > 0){
        [self.imageDataSource_ removeAllObjects];
    }

}

- (void) addObject:(id) object
{
    [self.imageDataSource_ addObject:object];
}

- (void) addObject:(id)object atIndex:(int) index
{
    [self.imageDataSource_ insertObject:object atIndex:index];
}

- (int) count
{
    return [self.imageDataSource_ count];
}

- (id) objectAtIndex:(int) index
{
    if (index >= 0 && index < [self.imageDataSource_ count]){
        return [self.imageDataSource_ objectAtIndex:index];
    } 

    return nil;
}

- (void) dealloc
{
    [super dealloc];
    [imageDataSource_ release];
}

@end

संपादित करें:

ऐसा लगता है कि NSZombieEnabled इस मुद्दे को छिपाने लग रहा था। जब मैं NSZombieEnabled अक्षम करता हूं तो यह सिम्युलेटर और डिवाइस पर अब क्रैश हो जाता है।

2
जोड़ा संपादित
विचारों: 1
यदि NSZombieEnabled इस मुद्दे को छुपा रहा है, तो यह लगभग निश्चित रूप से एक डबल मुक्त है। बहुत अजीब बात है कि उपकरण टेम्पलेट ने इसे नहीं उठाया ...
जोड़ा लेखक MobileVet, स्रोत

2 उत्तर

मैं जिम से सहमत हूं, एक डबल रिलीज की तरह दिखता है।

मैं इस स्थिति के परीक्षण के लिए इंस्ट्रूमेंट्स ज़ोंबी 'प्रोफ़ाइल का उपयोग करूंगा। यह सिम्युलेटर में ही किया जा सकता है, लेकिन आपको दिखाया जाना चाहिए कि क्या डबल रिलीज़ किया जा रहा है।

एक बार यह 100% स्पष्ट हो जाने पर, स्थिति को हल करने के लिए आमतौर पर यह बहुत आसान होता है।

1
जोड़ा
हां, लेकिन आपको एक विशेष उपकरण टेम्पलेट का उपयोग करने की आवश्यकता है जो इसे बहुत स्पष्ट कर देगा। काश मैं एक छवि शामिल कर सकता हूं ... यदि आप बाईं ओर आईओएस सिम्युलेटर टेम्पलेट फ़िल्टर में 'मेमोरी' पर क्लिक करते हैं, तो आप 'लाश' को 5 वें विकल्प (दूसरी पंक्ति पर पहली बार) के रूप में देखेंगे और इसे सब कुछ सेट करना चाहिए आप।
जोड़ा लेखक MobileVet, स्रोत
ज़ोंबी का उपयोग नहीं कर सकते क्योंकि यह सिमुलेटर पर ठीक काम करता है .. क्रैश नहीं होता है
जोड़ा लेखक adit, स्रोत
बस उपकरणों से NSZombies का उपयोग करने की कोशिश की और डिवाइस पर एक ही कदम पुन: उत्पन्न करते समय कोई रिसाव नहीं देखा
जोड़ा लेखक adit, स्रोत
आप इस योजना में NSZombie सक्षम हैं?
जोड़ा लेखक adit, स्रोत
हाँ .. मेरे पास उसके साथ चलने वाले यंत्र थे .. यह सामान्य चलता है और मुझे कोई भी डबल रिलीज या कभी भी नहीं दिखाई देता है
जोड़ा लेखक adit, स्रोत
यह मुश्किल है .. क्योंकि यह सिम्युलेटर पर ठीक काम करता है और डिवाइस पर इसे चलाते समय .. मैंने दोनों मामलों के लिए उपकरण पर लाश का उपयोग करके इसे प्रोफाइल किया और मुझे कोई संकेत नहीं मिला कि मैं कुछ भी रिलीज़ कर रहा हूं .. जब मैं इसे चलाता हूं एक उपकरण तार से जुड़ा हुआ नहीं है .. यह दुर्घटनाग्रस्त है
जोड़ा लेखक adit, स्रोत
मैंने ऊपर कुछ और जानकारी जोड़ा
जोड़ा लेखक adit, स्रोत
यह सिम्युलेटर पर ठीक काम नहीं करता है। जब आप कुछ छोड़ते हैं, तो यह बेहद भाग्यशाली है कि यह दुर्घटनाग्रस्त हो या नहीं। हालांकि ओवर-रिलीज अभी भी होता है, और ज़ोंबी दृष्टिकोण पर ध्यान दिए बिना काम करना चाहिए।
जोड़ा लेखक Jim, स्रोत
आप रिसाव की तलाश नहीं कर रहे हैं, आप एक डबल रिलीज की तलाश में हैं, जो मूल रूप से रिसाव के विपरीत है। अपनी योजना संपादित करें और रन अनुभाग के विकल्पों में ज़ोंबी ऑब्जेक्ट्स सक्षम करें।
जोड़ा लेखक Jim, स्रोत
और आप अपने डिवाइस पर कोड चलाते समय NSZombies का उपयोग कर सकते हैं।
जोड़ा लेखक Abizern, स्रोत

ऐसा लगता है कि आप इसे एक कोड में डालकर AHInstagramImageData </​​code> का एक उदाहरण जारी कर रहे हैं, फिर इसे बरकरार रखने के लिए पर्याप्त गिनती को कम करना। फिर, जब इसे शब्दकोश से हटा दिया जाता है, तो इसे फिर से जारी किया जाता है और यह उस ऑब्जेक्ट के लिए स्मृति को डिलीकेट करने का प्रयास करता है जो अब मौजूद नहीं है।

कोड को जिम्मेदार पोस्ट करें और आपको अधिक विस्तृत सहायता मिल सकती है। अकेले एक क्रैश लॉग पर जाने के लिए वास्तव में पर्याप्त नहीं है।

0
जोड़ा
मैंने उस कोड को ज़िम्मेदार जोड़ा .. उम्मीद है कि आप और मदद कर सकते हैं .. क्योंकि मैं नहीं देख रहा हूं कि डबल रिलीज कहां है
जोड़ा लेखक adit, स्रोत
मैंने जोड़ा कि मैं डेटा स्रोत कैसे सेट करता हूं .. अगर आप यही चाहते हैं तो मुझे बताएं
जोड़ा लेखक adit, स्रोत
मैंने ऊपर दिए गए कोड को जोड़ा है कि मैं इस संपत्ति को कैसे परिभाषित कर रहा हूं .. मुझे पता है कि यह अजीब अभ्यास है
जोड़ा लेखक adit, स्रोत
वह कोड है जो त्रुटि को ट्रिगर कर रहा है, लेकिन गलती शायद वह है जहां आप डेटा स्रोत सेट करते हैं। क्या आप इसे पोस्ट कर सकते हैं?
जोड़ा लेखक Jim, स्रोत
self.imageDataSource_ = temp; सही नहीं दिखता है। आप संपत्ति सिंटैक्स का उपयोग कर रहे हैं, लेकिन एक निजी इवर नामकरण सम्मेलन। चूंकि आपका कोड संकलित करता है, आप एक संपत्ति का उपयोग कर रहे हैं, लेकिन आप उनके बीच के अंतर के बारे में मिश्रित प्रतीत होते हैं। आप इस संपत्ति को कैसे परिभाषित कर रहे हैं?
जोड़ा लेखक Jim, स्रोत