Ostrzeżenie dotyczące scenorysu: komórki tabeli prototypów muszą mieć identyfikatory ponownego wykorzystania


123

Otrzymuję to ostrzeżenie od scenorysu - komórki tabeli prototypów muszą mieć identyfikatory ponownego wykorzystania.

Zmieniłem nazwę identyfikatora w inspektorze atrybutów, ale wygląda na to, że nie usunęło ostrzeżenia.

Jakieś sugestie?


Wypełniłeś niewłaściwe pole lub masz więcej niż jeden widok tabeli. Czy możesz opublikować zrzut ekranu inspektora atrybutów?
jrturton

3
Teraz jest ok, stary. Znalazłem rozwiązanie. Wartość identyfikatora powinna być taka sama jak identyfikator ponownego wykorzystania. :)
K.Honda

Czy ustawiłeś identyfikator dla każdej komórki?
Mick MacCallum

Cześć Honda! Czy mógłbyś mi powiedzieć, co zrobiłeś, ponieważ otrzymuję ten sam błąd.
Varun Mehta

2
Zauważyłem, że czasami (obecnie używam najnowszej wersji Xcode 5 Beta 5 (5B103i)) zaznacza nieprawidłowe lokalizacje błędu / ostrzeżenia w scenorysie. Jeśli więc klikniesz ostrzeżenie, czasami pokaże ono niewłaściwą lokalizację, w której podobne ostrzeżenie można już naprawić. Proponuję ręcznie przejrzeć dowolne widoki tabeli, które masz w swojej serii ujęć i sprawdzić, czy są jakieś inne komórki z brakującym identyfikatorem. Powyższe rozwiązało mój problem z tym ostrzeżeniem. Dzięki @ K.Honda za zadanie pytania, ponieważ ten temat pomógł mi zrozumieć, jak rozwiązać problem.
Justas

Odpowiedzi:


159

Aby wyłączyć ostrzeżenie, musisz nadać nazwę identyfikatorowi komórki:

wprowadź opis obrazu tutaj


14
mi się przydarzyło. zamknij xcode - otwórz go, a następnie zmień identyfikator
Idan Magled

7
Gdy ostrzeżenie pozostaje, oznacza to, że gdzieś na Twoim StoryBoard nadal znajduje się komórka bez identyfikatora
saimonx

Jeśli masz więcej niż 1 prototypową komórkę, musisz nadać im wszystkim identyfikator, w przeciwnym razie po prostu ustaw liczbę na jeden w komórce prototypowej
user1700737

6
Musiałem usunąć folder Derived Data (odpowiednik Xcode w przypadku ponownego uruchomienia systemu Windows) i odbudować, aby pozbyć się tego fałszywego ostrzeżenia.
Michael McGuire,

To zadziałało dla mnie: zamknij Xcode, otwórz / Users / username / Library / Developer / Xcode / DerivedData w Finderze i usuń całą jego zawartość (nie sam folder DerivedData).
dldnh

18

Innym sposobem jest ustawienie właściwości 'Prototype Cells' widoku tabeli na zero w Attributes Inspector, jeśli definiujesz komórkę programowo za pomocą .xib.

Ustawienie komórek prototypu na 0 w Inspektorze atrybutów


9

Ponieważ storyboard jest w rzeczywistości plikiem XML, kolejną sztuczką jest otwarcie storyboardu za pomocą dowolnego edytora tekstu (nie Xcode!) I spróbuj znaleźć wszystkie węzły tableViewCell. Na przykład naciśnij CMD + F , wpisz <tableViewCell contentMode="scaleToFill"i naciśnij Enter. Prawdopodobnie dowiesz się, wiersze takie same jak w tym:

<tableViewCell contentMode="scaleToFill" selectionStyle="blue" accessoryType="disclosureIndicator" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="GenericCellID" id="kBr-Qn-Tki">

Proszę zwrócić uwagę na reuseIdentifier="GenericCellID"kluczową wartość. Wiersze, które uruchamiają ostrzeżenie (bez identyfikatorów ponownego wykorzystania), nie będą miały takiej wartości klucza. Spójrz na węzły powyżej w edytorze tekstu, a zobaczysz tableViewControllerwęzeł z nazwą klasy, którą musisz sprawdzić w edytorze scenariuszy Xcode i naprawić, zgodnie z odpowiedzią aleroot.


1
Możesz faktycznie otworzyć swoją storyboard jako kod za pomocą Xcode, wykonując CTRL + kliknij plik storyboardu Open As>>Source Code
NSTJ

4

Jeśli ostrzeżenie Xcode nadal nie znika nawet po ustawieniu reuseIdentifier, wypróbuj Menu "Produkt -> Wyczyść". Pomogło mi to i po tym ostrzeżenie już się nie pojawiało.


2

Ponieważ dwukrotne kliknięcie tego ostrzeżenia może prowadzić do odrobiny dzikiego pościgu za gęsią skórką (konkretny UITableViewCell nie jest wybierany), chciałem tylko dodać, że chociaż niektóre z tych ostrzeżeń zostaną automatycznie rozwiązane, niektóre nie .

Jeśli masz pewność, że oznaczyłeś wszystkie swoje komórki w Storyboard, odbuduj projekt - Twoje ostrzeżenie może zniknąć (tak jak moje).


2

Zdrowaś Maryjo: ponowne uruchomienie XCode zadziałało dla mnie (ale prawdopodobnie była to tylko ręczna przebudowa, która była wymagana).


1

Otrzymałem to ostrzeżenie dla Xcode 7. Pracuję z Swift. Nie dodałem kontrolera nawigacji do początkowego kontrolera widoku. Kiedy to zrobiłem… dostałem ostrzeżenie od StoryBoard. To co zrobiłem to:

  1. Istnieją dwa odcinki
    1. z kontrolera nawigacji do głównego kontrolera widoku i
    2. z głównego kontrolera widoku do początkowego kontrolera widoku.
  2. Wybierz przejście łączące główny kontroler widoku z początkowym kontrolerem widoku.
  3. Nazwij identyfikator
  4. Wybierz zapisaną część kontrolera „Prototyp” -> tam zobaczysz identyfikator jako opcję.
  5. Wklej tę samą nazwę identyfikatora, jaką wprowadziłeś wcześniej.

Ostrzeżenie idzie ... jeśli nie wyczyść sdk :)


1

Upewnij się, że ustawiasz identyfikator ponownego użycia na obiekcie, a nie identyfikator przywrócenia . Oba są dostępne za pośrednictwem scenorysu i łatwo je pomylić.

W pliku XML scenorysu, które chcesz ustawić reuseIdentifier, nie restorationIdentifier.


0

Zauważyłem, że ten błąd występuje, gdy masz wiele komórek prototypowych (we właściwościach widoku tabeli) i nie nadałeś im wszystkich identyfikatorów ponownego wykorzystania.


Też to widziałem, czy istnieje sposób na nazwanie wszystkich komórek naraz, czy jest inny sposób na usunięcie tych ostrzeżeń?
CatsLoveJazz

1
Każda komórka Prototye potrzebuje własnej unikalnej nazwy. Więc nie ma sposobu, aby zrobić to automatycznie
Vincent,

0

Identyfikator to nazwa, do której się odnosisz w swoim pliku .m. Gdy nie jest wypełniona, nie można odwołać się do komórki.


0

To do ustawiania identyfikatora ponownego wykorzystania przez programowe

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath (NSIndexPath*)indexPath 
{
    static NSString *cellIdentifier = @"wot";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

    if (!cell)
        cell = [[UITableViewCell alloc] initWithStyle: someStyle reuseIdentifier: cellIdentifier];

    return cell;
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.