'Sử dụng mã nhận dạng chưa được giải quyết' trong Swift


93

Vì vậy, tôi đã tạo ra một ứng dụng và mọi thứ đều hoạt động rất tốt. Nhưng hôm nay tôi tạo một lớp mới như thường lệ và vì lý do nào đó trong lớp này tôi không thể truy cập biến Public / Global từ các lớp khác. Tất cả các lớp khác đều có thể, nhưng bây giờ khi tôi cố gắng tạo một lớp mới, tôi không thể. Làm thế nào điều này sẽ được sửa chữa?

Tôi đang sử dụng Swift và Xcode 6.

Tầng lớp lao động:

import UIKit
import Foundation
import Parse
import CoreData

var signedIn = true

class ViewController: UIViewController {

Lớp mới:

import UIKit

class NewClass: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        signedIn = false

}

Nhưng trên signedIn = false

Tôi gặp lỗi:

sử dụng số nhận dạng chưa được giải quyết "signIn"


và có tôi đã bị xóa và tái tạo lớp này nhiều lần
của Apple Geek

Vui lòng hiển thị mã của bạn, cả hoạt động và không hoạt động.
Wez

Bạn có thể chỉ định phiên bản XCode / Swift mà bạn đang sử dụng (nếu là phiên bản beta hay không)?
lchamp

@Ichamp Xcode 6.1 không phải là phiên bản beta.
Apple Geek

1
Đây có phải là mã hoàn chỉnh của bạn không? do bạn thụt lề nên có vẻ như bạn đang thiếu dấu ngoặc nhọn }ở cuốiviewDidLoad()
Wez

Câu trả lời:


296

Một vấn đề có thể xảy ra là lớp mới của bạn có Mục tiêu khác hoặc Mục tiêu khác với lớp kia.

Ví dụ: nó có thể có mục tiêu thử nghiệm trong khi mục tiêu còn lại thì không. Đối với trường hợp cụ thể này, bạn phải đưa tất cả các lớp của mình vào mục tiêu thử nghiệm hoặc không có lớp nào trong số chúng.

Mục tiêu


Nếu lớp học nằm trong một mục tiêu khác, hãy đảm bảo bạn nhập lớp đó lên đầu tệp nhanh của mình
Medhi

2
hehe, đó là một vấn đề. Tôi quên thiết lập mục tiêu cho lớp học. Tnx :)
tBug

Ôi trời, tôi đã dành vài giờ để giải quyết vấn đề này. Như một thông báo lỗi ngu ngốc. Ngay cả Lỗi cú pháp cũng tốt hơn!
turingtested vào

yup .. nó không được đặt làm mục tiêu cho một dự án thử nghiệm !! cảm ơn bạn
reidisaki

1
Của tôi đã ở trong, nhưng tôi chỉ bỏ chọn sau đó kiểm tra lại, điều này đã khắc phục sự cố này VÀ tính năng tự động hoàn thành / intellisense của tôi đã hoạt động trở lại!
Stephen J

7

'Sử dụng mã nhận dạng chưa được giải quyết' trong Swift của tôi cũng xảy ra khi bạn quên nhập thư viện. Ví dụ, tôi gặp lỗi: nhập mô tả hình ảnh ở đây

Trong đó tôi đã quên UIKit

nhập UIKit


1
nhập AVFoundation
Jenita _Alice4Real

5

Một lần tôi gặp sự cố này sau khi đổi tên tệp. Tôi đã đổi tên tệp từ bên trong Xcode, nhưng sau đó Xcode không thể tìm thấy hàm trong tệp. Ngay cả việc xây dựng lại sạch sẽ không khắc phục được sự cố, nhưng việc đóng và sau đó mở lại dự án sẽ khiến bản dựng hoạt động.


Điều này cũng hoạt động để thay đổi vị trí của tệp
Logan George

chính xác là tôi đã xóa các tham chiếu tệp và sau đó thêm lại chúng. và mọi thứ đều hoạt động
Hamed Nova

4

Đôi khi trình biên dịch nhầm lẫn về cú pháp trong lớp của bạn. Điều này xảy ra rất nhiều nếu bạn dán nguồn từ một nơi khác.

Hãy thử giảm tệp nguồn "chưa được giải quyết" xuống mức tối thiểu, dọn dẹp và xây dựng. Khi nó xây dựng thành công, hãy thêm tất cả sự phức tạp trở lại lớp của bạn.

Điều này đã làm cho tôi biến mất khi khởi động lại Xcode không hoạt động.


4

Một nơi khác mà tôi đã gặp lỗi này là khi dự án của bạn có nhiều mục tiêunhiều tiêu đề bắc cầu . Nếu đó là một lớp chia sẻ, hãy đảm bảo bạn thêm tài nguyên vào tất cả các tiêu đề bắc cầu.

Một mẹo hay là xem trong bảng Điều hướng Vấn đề bên trái; đối tượng gốc sẽ hiển thị mục tiêu đang đưa ra khiếu nại.


3

Đối với tôi, lỗi này đã xảy ra vì tôi đang cố gọi một hàm lồng nhau . Điều duy nhất tôi phải làm để sửa nó là đưa hàm ra phạm vi nơi nó có thể nhìn thấy được.


Bằng cách "đưa chức năng ra phạm vi nơi nó được hiển thị", bạn có nghĩa là đánh dấu nó là công khai?
Barry Jones

Không. Chỉ đơn thuần là di chuyển / kéo hàm đến một phạm vi khác, tức là dưới phạm vi của lớp
Honey

3

Trong trường hợp của tôi, tôi có một tệp Object-C cũng nằm trong cùng Tư cách Thành viên Mục tiêu. Tôi đã sửa bằng cách thêm #import "YourObjectCFileHeader.h"tệp bên trongBridging-Header.h


1

Vì bạn chưa khai báo. Nếu bạn muốn sử dụng một biến của lớp khác, bạn phải sử dụng

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var DestViewController : ViewController = segue.destinationViewController as ViewController
    DestViewController.signedIn = false
}

Bạn phải đặt mã này ở cuối mã NewClass


có nhưng tôi đã sử dụng các lớp khác và chúng hoạt động tốt khi không có điều đó, chỉ là khi tôi tạo lớp mới này.
Apple Geek

2
Điều này sẽ không hoạt động, anh ta đã khai báo biến signIn trong phạm vi toàn cục, không phải bên trong lớp của anh ta.
Sam

1

NewClassKế thừa của bạn từ UIViewController. Bạn đã khai báo signedIntrong ViewController. Nếu bạn muốn NewClasscó thể xác định biến đó, nó sẽ phải được khai báo trong một lớp mà bạn NewClasskế thừa từ đó.


1

Tôi gặp lỗi này cho Mantle Framework trong Dự án Objective-Swift của mình. Những gì tôi đã thử là,

  1. Kiểm tra xem nhập có trong tệp Bridging-Header.h hay không
  2. Thay đổi tư cách thành viên mục tiêu cho Framework trong tệp Mantle.h như được hiển thị trong ảnh chụp màn hình bên dưới.

Chuyển đổi giữa Tư cách thành viên đầu tiên xây dựng dự án, kết thúc với lỗi. Sau đó, xây dựng dự án với Tư cách thành viên công cộng cho tất cả các khung công tác xuất hiện cho tệp Mantle.h , bạn phải có được thành công.

Nó chỉ là một lỗi của việc xây dựng với nhiều khuôn khổ trong dự án Objective-C Swift.

nhập mô tả hình ảnh ở đây


0

Nếu điều này liên quan đến một lớp bạn đã tạo, hãy đảm bảo rằng lớp đó không được lồng vào nhau.

Fe

A.swift

class A {

   class ARelated {

   }
}

gọi var b = ARelated()sẽ cung cấp 'Sử dụng số nhận dạng chưa được giải quyết: ARelated'.

Bạn có thể:

1) tách các lớp nếu muốn trên cùng một tệp:

A.swift

class A {

}

class ARelated {

}

2) Giữ nguyên cấu trúc của bạn và sử dụng lớp bao quanh để đến lớp con:

var b = A.ARelated


0

Tôi đã làm một sai lầm ngu ngốc. Tôi đã quên đề cập đến lớp là công khai hoặc mở trong khi cập nhật mã trong không gian làm việc cocoapod.

Vui lòng kiểm tra xem có truy cập nếu làm việc trong không gian làm việc riêng biệt hay không.


0

Bạn quên khai báo biến. Chỉ cần đặt vartrướcsignedIn = false


Tôi sẽ giả định rằng đó chỉ là lỗi đánh máy trong mã đã đăng (cùng với dấu ngoặc đóng bị thiếu trên viewDidLoad.
shim

0

Vấn đề của tôi là gọi chương trình của tôi có cùng tên với một trong những cái kén của nó. Nó gây ra xung đột. Giải pháp: Tạo một chương trình tên khác.


0

Đây không phải là trực tiếp đến mẫu mã của bạn, nhưng nói chung là về lỗi. Tôi viết nó ở đây, vì Google hướng lỗi này đến câu hỏi này, vì vậy nó có thể hữu ích cho các nhà phát triển khác.


Một trường hợp sử dụng khác khi bạn có thể gặp lỗi như vậy là khi bạn thêm bộ chọn vào phương thức trong một lớp khác, ví dụ:

private class MockTextFieldTarget {
private(set) var didCallDoneAction = false
    @objc func doneActionHandler() {
        didCallDoneAction = true
    }
}

Và sau đó trong một lớp khác:

final class UITextFieldTests: XCTestCase {
    func testDummyCode() {
        let mockTarget = MockTextFieldTarget()
        UIBarButtonItem(barButtonSystemItem: .cancel, target: mockTarget, action: MockTextFieldTarget.doneActionHandler)
        // ... do something ...
    }
}

Nếu ở dòng cuối cùng bạn chỉ cần gọi #selector(cancelActionHandler)thay vì #selector(MockTextFieldTarget.cancelActionHandler), bạn sẽ nhận được

sử dụng mã định danh chưa được giải quyết

lỗi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.