2009-06-30 36 views
5

Ok, tôi đã cố gắng tạo đối tượng GKSession của riêng mình và phương thức ủy nhiệm cho tôi lỗi trong bảng điều khiển mà tôi chưa tìm ra cách khắc phục. Tôi đã tự hỏi nếu có ai có bất cứ đề nghị hoặc đã gặp phải vấn đề này? * Chỉ cần một lưu ý - peerStatus biến được định nghĩa ở nơi khác trong mã của tôi. Các peer có thể được đưa ra một trạng thái của "kServer" hoặc "kClient". Tôi thà xác định từng là trong GKSessionModeServer hoặc GKSessionModeClient bởi vì tôi đã đọc rằng nếu peer là trong GKSessionModePeer, thời gian thực hiện thực sự chậm hơn bởi vì nó phải làm công việc của cả Client và Server.Vấn đề GKSession - Mục tiêu-C GameKit

- (GKSession *)peerPickerController:(GKPeerPickerController *)picker sessionForConnectionType:(GKPeerPickerConnectionType)type { 
    if (peerStatus == kServer) { 
     GKSession *session = [[GKSession alloc] initWithSessionID:@"Josh_Land" displayName:nil sessionMode:GKSessionModeServer]; 
     return [session autorelease]; 
    } 
    else { 
     GKSession *session = [[GKSession alloc] initWithSessionID:@"Josh_Land" displayName:nil sessionMode:GKSessionModeClient]; 
     return [session autorelease]; 
    } 
} 

Mã lỗi toàn bộ là:

Lắng nghe trên cổng 56.386 2009-06-30 10: 31: 41,892 GKTank [17.756: 20b] *** Chấm dứt ứng dụng do còn tự do ngoại lệ 'GKInvalidArgumentException' , lý do: 'Một đối tượng GKSession vaild với một chế độ GKSessionModePeer phải được cung cấp, hoặc để tạo một đối tượng GKSession mặc định trả về' nil 'trong việc thực thi -peerPickerController: sessionForConnectionType :. Đối tượng được cung cấp là: gửi 0 gói dữ liệu: rush (0 gói 0 byte): dựa (0 gói 0 byte): rtry (0 gói 0 byte): sack (0 gói 0 byte): hiện tại trọng số trung bình rtt (0 ms) với chế độ phiên: 0' 2009-06-30 10: 31: 41,893 GKTank [17.756: 20b] Ngăn xếp: ( 807.902.715, 2452446779, 807.986.683, 807.986.522 , 927.035.842, 927.037.074 , 927.038.407, 815.223.834 , 927038949, 9245, 8562, 814.709.201, 815.110.321 , 815.119.058, 815.114.270 , 814.813.151, 814722763, 814.748.641, 839.148.405 , 807.687.520, 807.683.624 , 839.142.449, 839.142.646 ,)

+0

Sẽ rất hữu ích nếu bạn đăng lỗi mà bạn đang gặp phải. –

+0

Xin lỗi, tôi đã chỉnh sửa bài đăng với mã lỗi ngay bây giờ. Nó thực sự hoạt động nếu tôi chạy cấu hình GKSession để GKSessionModePeer cho cả hai, nhưng tôi đang cố gắng tránh xa hình thức đó. Tôi thà chỉ định phiên làm việc ở chế độ Máy chủ hoặc Máy khách. Tôi đã tự hỏi nếu điều này thậm chí có thể ngay bây giờ (nơi nó chỉ ra, có thể có một số lỗi trong mã ??) hoặc là nó mã của tôi? –

+0

Tôi cũng không biết câu trả lời nhưng bạn đã thử nghiệm xem liệu nó có thực sự chậm hơn trong bất kỳ cách nào quan trọng không? Nếu bạn chỉ đọc nó chậm hơn, nhưng không thực sự nhìn thấy một hiệu suất hit từ nó thì điều này cũng có thể được tối ưu hóa sớm. Điều đó nói rằng, thật thú vị khi thấy những gì đang xảy ra với thử nghiệm của bạn. –

Trả lời

7

tôi đã không thực sự thực hiện bất cứ điều gì bằng GameKit nêu ra, nhưng chỉ nhìn qua các tài liệu, nó trông giống như bạn chỉ có thể sử dụng GKPeerPickerController nếu bạn đang sử dụng GKSessionModePeer. Nếu bạn muốn sử dụng GKSessionModeServer/Client, bạn cần làm việc trực tiếp với các phiên và đại biểu của họ. Xem phần trong Hướng dẫn lập trình bộ trò chơi trên Implementing a ServerConnecting to a Service.

chức năng chính của bạn sẽ xoay quanh phương pháp GKSessionDelegate
-session:peer:didChangeState: trong cả hai chế độ client và server và
-acceptConnectionFromPeer:error:-denyConnectionFromPeer: trong chế độ máy chủ.

+0

ah cảm ơn, tôi sẽ cố gắng và báo cáo lại kết quả. –

+0

Sau khi kiểm tra với táo, bạn đã đúng. –

Các vấn đề liên quan