2012-09-15 10 views
8

Używam xcode 4.4.1 dla celu iOS 5.1 Zacząłem mój projekt używając ARC, i w środku w projekcie dodałem do mojego projektu trochę nie-łukowego źródła z trzeciej strony. w tym momencie, postanowiłem spróbować refactoring w xcode i wystąpił błąd. pochodzi z jednego z moich oryginalnych kodów źródłowych.refaktoryzacja łuku powoduje, że "synteza słabych" właściwości jest dozwolona tylko w trybie łuku lub gc "

Posiadam właściwość (nonatomic, weak) i zsyntetyzowałem ją ==> synteza "słabej" właściwości jest dozwolona tylko w trybie ARC lub GC.

Jestem zaskoczony - używam łuku i narzeka, że ​​jest dozwolone tylko w łuku?

W tej chwili zreperowałem aplikację trzeciej strony z innego projektu i skopiowałem ją, aby mój projekt działał, ale powyższe pytanie jest nadal trudne do zrozumienia. Dzięki! (przy okazji, kiedy nie konwertować do łuku, to mówi, że cel obecnie używa ARC)

+0

Mam ten problem, gdy ustawiono "słaby" typ właściwości zamiast "przypisz" przed migracją do ARC – poGUIst

Odpowiedz

-1

zamiast używać:

@property(nonatomic,assign) 

* uwaga - to nie to samo, co słabe, ale bardzo podobny . Słaby również ustawia obiekt na zero, przydziela nie.

+0

To nie jest prawidłowa odpowiedź, ponieważ przypisanie to nie to samo. Słaby automatycznie ustawia zmienną na zero, gdy jest wydana. Przypisanie nie. – AppHandwerker

+0

Nie są one takie same, ponieważ słaby nie jest koncepcją w starych wersjach systemu iOS. W starych wersjach systemu iOS, które nie pozwalają na słabe, najbliżej otrzymujesz przypisanie i ręczne ustawienie zmiennej na zero. – dacopenhagen

+2

Tak, ale jego celem jest 5.1, więc to nie jest właściwa odpowiedź. Wygląda na to, że problem jest już ustawiony jako projekt ARC i z jakiegoś powodu próbuje go przekonwertować później. Spowoduje to wyświetlenie dziwnych komunikatów o błędach, takich jak opisane. Na przykład, jeśli robi tak, jak mówisz, a następnie konwertuje na ARC, to zasugeruje zmianę na Słaby :) nieparzyste biorąc pod uwagę, że spowoduje to błąd przed rozdaniem, jeśli spróbujesz go przekonwertować po już wdrożeniu ARC – AppHandwerker

2

Wygląda na to, że problem został już skonfigurowany jako projekt ARC i z jakiegoś powodu próbujesz ponownie go przekonwertować. Mogę tylko założyć, że proces nie oczekuje na tym etapie słabych referencji. Jeśli ustawisz je na Przypisz, a następnie przekonwertuj na ARC, zobaczysz, że sugeruje to zmianę ich na słabą.

1

Miałem ten sam objaw za pomocą Xcode 4.6.3 kierowania na iOS 6.1. Wprowadziłem klasę inną niż ARC z innego projektu i przekonwertowałem ją tylko za pomocą menu Refactor, aby kolejne kompilacje zawiodły w istniejącej klasie z błędem, który widziałeś ("synteza" słabej "właściwości jest dozwolona tylko w łuku lub gc tryb").

Właściwości projektu wyraźnie mówiły, że był to projekt ARC, ale kompilator najwyraźniej zapomniał, że tak było w przypadku danej klasy.

Rozwiązałem problem, ustawiając właściwość na "mocną" i konwertując tę ​​klasę na ARC za pośrednictwem menu Refactor. Nic dziwnego, że powiedział mi, że nie są konieczne żadne zmiany, ale zaoferowałem przycisk Zapisz, który kliknąłem. Byłem wtedy w stanie zmienić nieruchomość z powrotem na "słabą" i skompilować projekt. (Przypuszczam, że niektóre metadane zostały zsynchronizowane gdzieś po drodze.)

EDYCJA: W końcu musiałem "refakturować" inne klasy zgodne z ARC do ARC, mimo że skompilowane wygenerowały ostrzeżenia i spowodowały awarie w mojej aplikacji . Myślę, że morał tej historii jest taki, że uwzględnienie całego twojego projektu w refaktoryzacji może być bezpieczniejsze ...

Powiązane problemy