簡體   English   中英

NSInvocation使應用程序崩潰

[英]NSInvocation making app crash

我正在使用NSInvocation,如下所示:

在我的init中,我是在viewDidLoad中編寫的:

SEL mySelector;
mySelector = @selector(initParsersetId:type:);

NSMethodSignature * sig = nil;
sig = [[self class] instanceMethodSignatureForSelector:mySelector];

myInvocation = nil;
myInvocation = [NSInvocation invocationWithMethodSignature:sig];
[myInvocation setTarget:self];
[myInvocation setSelector:mySelector];

我這樣稱呼它:

Idea *tempIdea = [[Idea alloc]init];
tempIdea = [genericArray objectAtIndex:indexPath.row];
idea.ideaId = tempIdea.ideaId;
[tempIdea release];

NSNumber *_id_ = [NSNumber numberWithInt:idea.ideaId];
[myInvocation setArgument:_id_ atIndex:2];  //CRASHING AT THIS LINE

我的應用程序在指示的行崩潰。 有人可以幫我嗎?

我找到了答案,但我不知道如何。 實際上,起初我是在viewDidLoad中編寫所有初始化代碼,並通過向NSInvocation對象傳遞不同的參數來簡單地重用NSInvocation對象,因為NSInvocation是可變對象。 沒用 然后我編寫了一個包含所有初始化代碼的方法,並在每次使用NSInvocation對象並且該方法起作用時都調用該方法...

從您的代碼中還不清楚。 但是,我看到了一些可疑的東西。 希望它可以為您提供一些有用的提示。

首先,我看不到您保留實例(從[NSInvocation ...自動釋放])。 由於[NSInvocation ...]中的實例是自動釋放的,因此,在viewDidLoad事件之后,您的類級別變量myInvocation將不會保留該實例。

代碼中的第二件事是選擇器是一種自定義的構造函數,以init開頭.....我不確定是否可以在同一實例中調用該事件。 另一點是,如果要調用的init ...方法返回self? 它應該是。

您可以使用NSLog函數在選擇器事件中輸出一些消息。 NSLog發出的所有消息都將在XCode的輸出控制台中。

您需要提供setArgument:您要傳遞的參數的地址,而不是參數本身:

[myInvocation setArgument:&_id_ atIndex:2];

[myInvocation setArgument:_id_ atIndex:2];

另外,您確定您的函數將NSNumber作為第一個參數嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM