iOS - UIPasteboard не работает вне приложения

Я думаю, что это скорее недостаток SDK, чем мои приложения, но недавно я пытался использовать UIPasteboard для копирования строк из моего приложения, и он отлично работает для вставки куда-либо, когда я нахожусь внутри приложения.

Когда я перехожу к другому приложению, нажимая кнопку «Домой» или что-то в этом роде, у меня просто нет возможности вставить скопированный контент.

UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
[pasteboard setString: @"blah" ];
NSLog(@"%@", pasteboard.string);

В этом случае он напечатает «blah», и всякий раз, когда я быстро касаюсь текстового поля, он будет отображать параметр вставки. Но если я захожу в Safari, Notes или Mail, эта опция не отображается.

Кроме того, если я скопирую что-то из почты и перейду в свое приложение, я также не увижу параметр вставки...


person Thiago Peres    schedule 06.12.2011    source источник
comment
У меня тоже была эта проблема с симулятором iOS, но я думаю, что это просто симулятор.   -  person Richard J. Ross III    schedule 06.12.2011
comment
Ну, я тестировал устройство, и оно не работает...   -  person Thiago Peres    schedule 08.12.2011


Ответы (5)


У меня похожая проблема. Это могут быть некоторые конфликты с какой-то сторонней библиотекой. Я обнаружил, что когда я удаляю Flurry Analytics, все в порядке. Я предполагаю, что библиотека что-то делает с событием «EnterBackground».

Вы можете попытаться «очистить» свое приложение. удалить вызов функции делегата enterbackground AppDelgate.

Я имею в виду, что ваш код или код третьей части может делать что-то во время «DidEnterBackground», что приводит к увеличению вашего буфера обмена. попробуйте ничего не кодировать по этому поводу:

  • (void)applicationDidEnterBackground:(UIApplication *)application{}

Также попробуйте удалить сторонний код, который нужно вызывать в: -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions –

person snakewa    schedule 09.12.2011
comment
Не могли бы вы быть более конкретным? Я не понял твоей части про уборку - person Thiago Peres; 09.12.2011

Чтобы сделать постоянный монтажный стол между приложениями, вы должны использовать

UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:pasteboardIdentifier create:YES];
[pasteboard setPersistent:YES];
[pasteboard setString:string];
person lucchiano    schedule 23.11.2012

Я смог восстановить функциональность монтажного стола, вернувшись к Flurry 2.8.4. Flurry 3.0.2 и 3.0.3 каким-то образом отключили поддержку копирования/вставки во внешних приложениях, таких как Блокнот.

person Rei    schedule 09.12.2011

Кажется, Flurry решил эту проблему, выпустив версию 3.0.4.

Жаль, жалобы моих пользователей заполонили мой почтовый ящик...

person xingzhi.sg    schedule 14.12.2011

// Сохранить текст

  UIPasteboard* board = [UIPasteboard
pasteboardWithName:@"com.company.wtv" create:YES]; 
board.persistent=YES; [board setValue:@"123456ccc"
forPasteboardType:@"com.company.wtv.sharedValue"];

// Retrive text

    UIPasteboard* board = [UIPasteboard pasteboardWithName:@"com.company.wtv" create:YES];
    board.persistent=YES;
    NSData* result=nil;
    NSString*resultStr=nil;
    result =[board valueForPasteboardType:@"com.company.wtv.sharedValue"];
    resultStr=[[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];// I got resultStr containing
123456ccc

    NSLog(@"key %@",resultStr);
person Waruna    schedule 20.07.2015