I'm currently trying to write a little iOS application in swift, where I have these Classes:
masterTableViewController addViewController and deleteViewController, each of them is connected to a, like the name already tells, viewController. The masterTableViewController should sent some data using the predefined function:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if(segue.identifier == "showDetails") {
var selectedIndexPath:NSIndexPath = self.tableView.indexPathForSelectedRow()!
var deleteViewController:deleteViewController = segue!.destinationViewController as deleteViewController
deleteViewController.todoData = todoItems.objectAtIndex(selectedIndexPath.row) as NSDictionary
}
I want to send the data of the current row to the next, by segue referenced controller.
This is where I get an error message stating that deleteViewController is not a type that can be assigned to a variable.
But I don't really understand what the problem s right now. Basically this should work because I just want to create a new object of the type my class is of and pass this one to my view controller.
In the reference I got this code from everything worked just fine.
You are mixing class names and instance variable names. Class names should be upper case: MasterTableViewController, AddViewController, DeleteViewController
At first, try to distinguish between the class name and the instance variable name by choosing a different name, i.e.:
var dvc:deleteViewController = segue!.destinationViewController as deleteViewController
dvc.todoData = ...
And see if it works
Another scenario where you might get mysterious 'use of undeclared type': the type (here DeleteViewController class) is defined in a file that you renamed by changing the 'Name' text box of the 'Utilities' pane. Then Xcode MIGHT not think the file is a member of the target, even though the checkboxes in the 'Target Membership' section of the 'Utilities' pane shows that the file IS a member of the project target. The workaround is to uncheck and recheck the checkbox that makes the file a member of the target. Xcode will reindex the project files and hopefully now consider the file a member of the target.
This can occur if the class you are compiling is included in a unit test module, but the class that is not defined is not.
You will find that the app compiles and runs, but compilation errors may be shown in the source.
Open the right bar and check the Target Membership settings. They should be consistent for both classes.
I realize you already have an accepted answer, but I've been chasing this error for too long and finally found the cause of my issue so maybe it'll help someone keep their sanity.
I encountered this issue when trying to integrate the Google admob sdk.
Here are the steps I took to debug:
Added 'import GoogleMobileAds' to the top of the view controller.
Added the frameworks using CocoaPods, tried again added it manually.
Checked the header search paths in Build Settings as well as the framework search paths. Verified that paths actually pointed to the frameworks I wanted to add.
Checked that the framework was included in the target I was trying to build.
Cleaned and tried to run, restarted and tried to run.
Revisited Build Settings, noticed framework search paths had a path with hyphens "-" (my_base_dir/my_project_dir/Pods/Google-Mobile-Ads-SDK/Frameworks). I've had issues with hyphens before so I changed the hyphens to underscores "_" and suddenly Xcode resolved the 'undeclared type' errors.
So apparently Xcode doesn't like hyphens in framework search paths.
Related
We all know and love the autocomplete feature of Xcode.
The above screenshot is taken from Xcode 9. I looks identical to what it did in Xcode 8. It knows about my class, and all of its different declarations and functions etc. This is not a SearchPaths-problem.
In Xcode 8, we were able to start typing the function name or the name of any variable used in the declaration of any function/initialiser to help the autocomplete single out which we want, like this:
However, in Xcode 9 this no longer happens. Instead, it completely ignores context and starts to show autocompletion as if I was typing this on a new line.
Is there a way to enable this again? I didn't know I needed this function until I lost it.
This happens to me in XCode 9.3, but only (it seems) if all the following conditions are met:
The instance is created from a different file or scope than the type definition
The instance is not created from within a function
An instance of the same type has not already been created at the current scope. (As discussed here.)
This implies some possible workarounds. You can create the instance within a function and then move the line of code elsewhere. Or you can create a dummy instance first, followed by the real instance on the next line—this works even if you don't include the arguments on the dummy line. For example:
let dummy = MyObject // no autocomplete available here
let obj = MyObject(anything: Any Object) // autocomplete working on this line!
I'm working with Core Data. Here is the class(generated by editor).
public class Tag: NSManagedObject {
}
And I defined an enum whose case has the same name as above.
enum NoteListType {
case Tag
case Album
}
When I tried to build it, I got this error message.
Use of undeclared type 'Tag'
When I CMD-click Tag to jump to its definition, it shows two options. Please help me. Many thanks in advance.
Update:
I tried to rename enum cases but still got undeclared type. Maybe it's caused by Xcode 8.2.1 and Core Data.
And I have published my project on Github. Here is the link.
I downloaded your git project and found out that this conflict is arising because of Target Membership of each file has both entity and Target so OS was unable to detect which class is referenced. I checked out the membership from Entity (kept only target) and the Tag ,Album were detected. Although I was unable to run the code as i got some compile team errors as you were trying to directly type cast NSManagedObject at some places . Please refer below screenshot .
I hope this helps you out.
Try this ..
enum NoteListType {
case tag
case album
}
I am getting this error on generating an NSManagedObject in Xcode 8.1 in Swift.
:0: error: filename "DemoOne+CoreDataClass.swift" used twice: '/Users/Swasidhant/Desktop/demo again/DemoOne+CoreDataClass.swift' and '/Users/Swasidhant/Library/Developer/Xcode/DerivedData/demo_again-hiinrbwwbmyfbrbctsfdzvudkkuy/Build/Intermediates/demo again.build/Debug-iphonesimulator/demo again.build/DerivedSources/CoreDataGenerated/Model/DemoOne+CoreDataClass.swift'
:0: note: filenames are used to distinguish private declarations with the same name
:0: error: filename "DemoOne+CoreDataProperties.swift" used twice: '/Users/Swasidhant/Desktop/demo again/DemoOne+CoreDataProperties.swift' and '/Users/Swasidhant/Library/Developer/Xcode/DerivedData/demo_again-hiinrbwwbmyfbrbctsfdzvudkkuy/Build/Intermediates/demo again.build/Debug-iphonesimulator/demo again.build/DerivedSources/CoreDataGenerated/Model/DemoOne+CoreDataProperties.swift'
:0: note: filenames are used to distinguish private declarations with the same name
Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc failed with exit code 1
I searched for this and got answers saying the file might be present twice in the project which is not my case. Another solution I came across was to remove the file from the build phase and add again. That too didn't work. Is it some build setting configuration mistake ? Or something else?
Here is the link with a demo project created with Xcode 8.1 and showing this problem:- https://www.dropbox.com/s/xwyzhshktb2hqe7/demo2.zip?dl=0
The issue is happening because of the Xcode automatic subclass generation feature.
According to What's New In Core Data
Xcode automatic subclass generation
Xcode now supports automatic generation of NSManagedObject subclasses
in the modeling tool. In the entity inspector:
Manual/None is the default, and previous behavior; in this case you
should implement your own subclass or use NSManagedObject.
Category/Extension generates a class extension in a file named like
ClassName+CoreDataGeneratedProperties. You need to declare/implement
the main class (if in Obj-C, via a header the extension can import
named ClassName.h).
Class Definition generates subclass files named
like ClassName+CoreDataClass as well as the files generated for
Category/Extension.
The generated files are placed in DerivedData and
rebuilt on the first build after the model is saved. They are also
indexed by Xcode, so command-clicking on references and fast-opening
by filename works.
So for fixing your issue, you need to set the Codegen field value to Manual/None as shown below:
This is what I did to fix this issue,
Select your entity in the data model
Set the Module to Current Product Module
Leave the Codegen to Class Definition though Manual/None also works
Select Editor > Create NSManagedObject Subclass
May help someone, Go to project compile source delete the extra reference if any.
Select code data model then select the Entity change the value of 'Codegen' to Manual/None.
It will work.
The issue was due a second file named:"Extensions.swift" in my project.
After deleting the duplicate "Extensions.swift" the error got resolved. Your error message might tell you which file is duplicated.
In my case Data Model (as example: MyCoreData.xcdatamodeld) was listed twice under Editor -> Create NSManagedObject Subclass... And here was reason why it was getting this type of error.
What I did:
I did delete MyCoreData.xcdatamodeld file.
Created another Data Model as example MyCD.xcdatamodeld.
Checked is here duplicated Data Models in here: Editor -> Create NSManagedObject Subclass...
Clean and later build for two times.
It happened to me when I copied and renamed entity. It failed to rename the class, so do it manually.
I just restart my Macbook and that clean my build folder. And it works like a charm!
I tried to include a class called 'name' and I got an error:
Swift Compiler Error: Use of unresolved identifier 'name'
The class exists and doesn't contain any compile errors.
There could be a few possible issues.
One of the classes has a Testing target and other one doesn't. You have to even include all of your classes in the testing target or none of them.
If it's Objective C class, check that the class is in ObjectiveC bridging header file.
If it's NSManagedObject subclass. Add #objc(className) before the class declaration.
If it's part of a different framework, make sure that the class or function is public
I had this one too. You will probably find that your first class is included in your testing module and that "name" isn't. Simply, if you include a class in testing, then every class that it references has to be in testing.
I had this problem too. I was trying to reference Class 1 within the code in Class 2. My problem was that Class 2 had target memberships in A and B, and Class 1 only had Target Memberships in Class A.
You can fix this by opening the Utilities Tab (farthest right button on the top bar of the Xcode window), and make sure that the same boxes are checked for both classes in the Target Membership subsection.
Got problem solved by
Target -> Build Phases -> Compile Sources -> Adding the class file
Add one more to the list.
If it is part of another framework, make certain that the "Build Active Architecture Only" settings are the same.
like in the title i got a crazy massage and i cannot handle with it
Unknown class info in Interface Builder file.
Every time I run my Project some crazy bugs will appear or some bars disappear. Did anyone know what to do?
Try this, in order:
Product->Clean in Xcode
Delete the app from the simulator or device
Restart Xcode
(Build &) Run again
If this doesn't help, you likely have a reference to a class in the nib or storyboard that you have to manually find and remove.
The warning may be because you have assigned a removed/deleted custom class name for one of the UIView subclass. In order to fix such scenarios,
Open interface builder class as Source Code by right clicking on it (Open As -> Source Code).
Find your unknown class name in the source file. And handle accordingly.
It worked for me.
See my answer to https://stackoverflow.com/a/29013058/784318
I did run into this problem today using Swift.
I changed a class Model.h + Model.m to a Model.swift.
This object was used in Interface Builder with the class = Model.
As soon as I replaced the object the class could no longer be loaded.
What I had to do was to change the class reference in IB from:
Class = Model
Module =
to
Class = Model
Module = <TARGETNAME>
You'll find the <TARGETNAME> in the build settings. It is also the name that shows up in your generated Swift-Header: #import "TARGETNAME-Swift.h"
I have solved this problem (while using Swift 4 / Xcode 10.1) by going to Custom Class panel, checking 'Inherit Module From Target' (right below Class & Module row).
I have got the same issue with Lottie library.
Unknown class AnimationView in Interface Builder file.
It can happens if your class view is in an other module.
To resolve this, go in your IB file (Xib or storyboard) / Show the identity inspector and set correctly the module :
I tend to see these types of errors when you change the name of your view and view controller classes after customizing a view or controller in Interface Builder to that class. I'd go through your views and controllers in your nib or storyboard to see if your custom classes still exist and match accordingly.
You'll run into issues with IB files when you rename or delete the underlying code without updating the IB file. A similar issue occurs when deleting or changing the name of IBOutlets after linking them to an object in Interface Builder. You'll still have the reference in Interface Builder unless you delete it explicitly.
Lastly, you can look at the IB file as a text file. It's an xml document, where you'll see all the class references. You can see if there are any classes there that may not exist in your project anymore.
This also happens if you deleted ClassName.m from Build Phases/Compile Sources
I'll restate the problem, with a bit of context from my end, then provide the solution:
I have created a custom Swift framework, and imported the framework project into the workspace. Then, I made the framework a target dependency to my Swift application. Finally, I referenced a class from the framework in Interface builder.
I kept getting the class not found error, and I noticed in the debugger it had the output class was the mangled/unmangled ObjC counterpart ..
The solution:
Simply add your framework header to your ObjC bridging header:
#import <MazKit/MazKit-Swift.h> // In my case, MazKit
Now, the symbols are exported, and you can verify that by cmd + click on the header itself, and you'll see the mangled/unmangled class names.
Project -> General -> Deployment Info -> Main Interface <- clear this field.
It seems you have deleted file Main (Storyboard) but you still have reference to it in project properties.
It could be that the file was not copied over in the build process. Goto the Build Phases Tab and check the copy Bundle resources to see if the file is there. If not add to the project clean and rebuild to see if that fixes your issue. This has helps me.
I had renamed one of my TableViewCell Class. Nothing worked other than checking the Inherit Module From Target checkbox.
Open the xib file > Goto Identity Inspector while it is selected > Check the checkbox (also make sure the Class name is correct).
Done!