То, что вы должны сделать, это сделать index
одинаковым, pandas
чувствительным index
, что означает, что они проверят индекс при выполнении присваивания
C = pd .DataFrame(A.index,index=A.index) # change here
C .columns = ['I']
C['Y'] = B .loc[C.I, 'Y']
C
Out[770]:
I Y
4 4 3
5 5 4
или просто изменят добавление кода. значения в конце
C['Y'] = B .loc[C.I, 'Y'].values
Так как вы упомянули поиск, давайте использовать lookup
C['Y']=B.lookup(C.I,['Y']*len(C))
#Out[779]: array([3, 4], dtype=int64)
То, что я нашел, - то, что MPMoviePlayerController должен быть отправлен сообщение остановки, прежде чем можно будет безопасно выпустить его. Таким образом, я делаю это в handlePlaybackEnd - сначала я останавливаю его, затем я автовыпускаю его. Вызов выпуска, кажется, не работает слишком хорошо:
- (void) moviePlayBackDidFinish : (NSNotification *) notification
{
VideoPlayerController * player = notification.object;
[player stop];
[player autorelease];
}
Все это становится немного более хитрым в этом, MPMoviePlayerPlaybackDidFinishNotification может быть отправлен несколько раз, но звонящий stop/autorlease дважды не сделает Вас никакая польза также. Таким образом, необходимо принять меры против этого так или иначе.
Наконец, это, кажется, берет несколько повторений основного цикла выполнения, пока Вы не можете безопасно создать новый экземпляр MPMoviePlayerController. Если Вы сделаете это слишком быстро, то Вы станете звуковыми, но никакое видео. Отличное развлечение, ха?
Чтобы ответить на комментарий 4thSpace к ответу выше, вы можете удалить наблюдателя уведомлений, чтобы вы не получали его несколько раз:
- (void)moviePlayBackDidFinish:(NSNotification *)notification {
MPMoviePlayerController *theMovie = [notification object];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:MPMoviePlayerPlaybackDidFinishNotification
object:theMovie];
[theMovie stop];
[theMovie release];
}
Для меня было недостаточно остановки и отпускания, если игрок не дошел до конца.
Мое решение - установить moviePlayer.initialPlaybackTime = -1
в moviePlayBackDidFinish:
перед его выпуском:
-(void)playMovie: (NSString *)urlString{
movieURL = [NSURL URLWithString:urlString];
moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];
moviePlayer.initialPlaybackTime = 0;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish: ) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer] ;
moviePlayer.scalingMode = MPMovieScalingModeAspectFit;
moviePlayer.movieControlMode = MPMovieControlModeDefault;
moviePlayer.backgroundColor = [UIColor blackColor];
[moviePlayer play];
}
-(void)moviePlayBackDidFinish: (NSNotification*)notification{
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer] ;
moviePlayer.initialPlaybackTime = -1;
[moviePlayer stop];
[moviePlayer release];
}
У меня была та же проблема, и я только что понял, что установил метод уведомления с object: nil (это была копипаста).
У меня было несколько уведомлений, хотя у меня вообще не должно было быть никаких уведомлений.
Вот мой новый код настройки уведомлений, который исправил все (см. Объект: moviePlayer):
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePlaybackDidFinish:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:moviePlayer];
Надеюсь, что это поможет. Теперь весь мой код работает правильно.
для iphone os 3.2 необходимо вызвать [moviePlayer pause]; перед вызовом [moviePlayer stop];
{{1} }