2012-12-05 25 views
10

not much report on the crashLỗi ứng dụng trên [[SKPaymentQueue defaultQueue] addTransactionObserver: observer];

Đó là tất cả tôi có thể nhận được từ các vụ tai nạn khi tôi làm trong applicationDidBecomeActive

MyStoreObserver * observer = [[MyStoreObserver alloc] initWithContext:self.managedObjectContext andDelegate:self]; 

[[SKPaymentQueue defaultQueue] addTransactionObserver:observer]; 

Nhưng điều kỳ lạ là tôi đã có thể mua hai lần trong quá khứ và thậm chí nếu tôi xóa ứng dụng re-reun tất cả mọi thứ tôi không thể thoát khỏi hố này. Nó không có vẻ logic. Tôi có thể phân bổ init người quan sát một mình mà không có vấn đề và tôi có thể gọi thanh toán mặc địnhQueue mà không có vấn đề nhưng nếu tôi cố gắng thêm người quan sát giao dịch vào hàng đợi, dừng cuộc sống. Đó là trên ARC và đại biểu tôi đã thêm vào người quan sát không phải là vấn đề. Tôi biết chắc mà.

Tôi đã thêm một NSLog để mỗi phương pháp trong người quan sát và không được gọi trước khi vụ tai nạn

SOLUTION FOUND

Được rồi, cũng có vẻ như các quan sát viên không được giữ lại bởi hàng đợi và do đó người quan sát cần phải là một biến cá thể.

Cảm ơn

+0

Có lẽ bạn nên thêm bạn giải pháp như một câu trả lời và đánh dấu nó là giải pháp, nếu không tiền thưởng sẽ vẫn mở. –

Trả lời

10

Được rồi, cũng có vẻ như các quan sát viên không được giữ lại bởi hàng đợi và vì thế người quan sát cần phải được một biến Ví dụ (hoặc giữ lại trong một cách nào đó).

+0

bạn có thể vui lòng cung cấp một số mã mẫu không? –

+0

biến thể hiện có nghĩa là bạn nên giữ một con trỏ trên đối tượng của bạn để nó không được deallocated. Bạn có thể chỉ đơn giản là tạo một thuộc tính (mạnh) mà điểm trên người quan sát của bạn –

1

Để thêm một nguồn chính thức cho câu trả lời này:

Bên trong tập tin tiêu đề SKPaymentQueue.h của Khung Storekit là sau bình luận rõ ràng:

// Observers are not retained. 
// The transactions array will only be synchronized with the server while the queue has observers. 
// This may require that the user authenticate. 
- (void)addTransactionObserver:(id <SKPaymentTransactionObserver>)observer __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);