Staram się wysłać obraz za pomocą shareKit bez użycia ActionSheet, ale używając własnego przycisku z
...
// --- add the mail button ------------------------------------
UIButton *buttonMail = [UIButton buttonWithType:UIButtonTypeCustom];
buttonMail.frame = CGRectMake( 0,0, btnW, btnH);
[buttonMail setImage:[UIImage imageNamed:@"btn_mail.png"] forState:UIControlStateNormal];
[buttonMail addTarget:self action:@selector(sendPerMailEvent:) forControlEvents:UIControlEventTouchUpInside];
...
// the sharekit image object
item = [SHKItem image:image title:@"Name of the image" ];
item.text = @"some text...";
[SHK setRootViewController:self.webView.window.rootViewController];
...
I
-(void)sendPerMailEvent:(id)sender {
[SHKMail shareItem:item];
[self closeScreenshotView];
}
Ale kiedy klikam przycisk, xcode wyświetla mi błąd „EXC_BAD_ACCESS” w pierwszym wierszu funkcji shareItem():
+ (id)shareItem:(SHKItem *)i
{
[SHK pushOnFavorites:[self sharerId] forType:i.shareType]; // -> EXC_BAD_ACCESS
Jestem nowy w objective-c, a aplikacja jest tworzona przy użyciu phonegap. dzięki!
2 odpowiedzi
Teraz dowiedziałem się: muszę dodać [item retain]
, to wszystko.
Po pierwsze, sygnał EXC_BAD_ACCESS mówi ci, że próbujesz uzyskać dostęp do obiektu po jego usunięciu.
Problem wygląda tak, że nie inicjujesz obiektu i jest on zwalniany, zanim będziesz go potrzebować.
Spróbuj tego:
SHKItem* item = [SHKItem alloc] init]
[item seTitle:@"Name of the image"];
I zobacz, czy nadal masz ten problem.
W przyszłości, jeśli otrzymasz EXC_BAD_ACCESS, spróbuj włączyć środowisko NSZombieEnabled link tutaj
Po drugie. Możesz przesłonić metodę dealloc klasy, która daje ci EXC_BAD_ACCESS i wydrukować stacktrace, aby pokazać, co powoduje cofnięcie alokacji za pomocą:
NSLog(@"I've been dealloced by: %@",[NSThread callStackSymbols]);
Podobne pytania
Nowe pytania
objective-c
Tego znacznika należy używać tylko w przypadku pytań dotyczących funkcji Objective-C lub zależnych od kodu w języku. Tagi [cocoa] i [cocoa-touch] powinny być używane, aby zapytać o ramy lub klasy Apple. Użyj powiązanych tagów [ios], [macos], [apple-watch] i [tvos] w przypadku problemów specyficznych dla tych platform.